几个例子后,就可以和tensorflow 愉快的玩耍

一、背景

Keras的易用,pytorch的直观,但是总避不开tensorflow毕竟谷狗大佬的,范围很广,从阿尔法狗由谷狗带火,AI热起来,但是tensorflow大部分人还是有点抗拒的,分析原因

1.不符合程序员直觉(程序员的直觉是代码可以一行行的运行,每一行就会有结果)

2.tensorflow接口众多,写个矩阵乘tf.multiply tf.matmul等等要区分

 

二、解决方法

1.理解tensorflow的思路

俗话说,不能避开就接受它,那么就理解tensorflow的思路,就是先建立图(graph),然后建立回话(Session),在session中调用sess.run(tensor)的结果。

2.让自己直觉理解它

2.1 怎么直觉理解呢,我的直觉就是例子来理解,用常数去做一些矩阵的运算。

#  矩阵转置,矩阵乘,矩阵的平方(其实是想得到特征的模)
import tensorflow as tf
with tf.device('/cpu:0'):
    sess = tf.Session()
    a =tf.constant([[1,2 ,3], [4 ,5, 6]])
    print("a.shape:",a.shape,sess.run(a))
    print("a的转置 a.transpose:",sess.run(tf.transpose(a)))
    b =tf.constant([[1,2 ,3], [4 ,5, 6]])
    print('\n 元素乘 a*b:',sess.run(a*b))
    print("元素乘 tf.multiply(a,b):",sess.run(tf.multiply(a,b)))
    print("\n 矩阵乘 tf.matmul:",sess.run(tf.matmul(a,tf.transpose(b))))
    
    
    
    a_square = tf.square(a)
    print("平方",sess.run(a_square))
    a_sum= tf.reduce_sum(a_square,1)
    print("平方和:",sess.run(a_sum))
    

2.2 numpy的矩阵运算是比较直观的,所以可以用numpy类推,加深理解。

其实可能tensorflow底层是不是就是和numpy类似的呢,可能!说白了现在深度所有的多维运算都是矩阵运算或者它的扩展。没啥神奇的。深度学习后面发展的逻辑因果符号运算可能会不同,扯远了。

import numpy as np
A = np.array([[1,2 ,3], [4 ,5, 6]])
B = np.array([[1,2 ,3], [4 ,5, 6]])
print(A.shape,A)
print("a转置:",A.T)
print('\n 元素乘 a*b:',A*B)
print("元素乘numpy.multiply:",np.multiply(A,B))

print("\n 矩阵乘 numpy.dot(A,B):",np.dot(A,B.T))

附上一个小彩蛋

矩阵里面一个遇到最多的axis参数,终结它

设axis=i,则numpy沿着第i个下标变化的放下进行操作。例如刚刚的例子,可以将表示为:data =[[a00, a01],[a10,a11]],所以axis=0时,沿着第0个下标变化的方向进行操作,也就是a00->a10, a01->a11,也就是纵座标的方向,axis=1时也类似。下面我们举一个四维的求sum的例子来验证一下: 

import numpy as np
data =[[1, 2],[3,4]]
print(f'data:{data}')
print(f"axis = 0: {np.sum(data,axis=0)}")
print(f"axis =1: {np.sum(data,axis=1)}")

# 结果
# data:[[1, 2], [3, 4]]
# axis = 0: [4 6]
# axis =1: [3 7]

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章