幾個例子後,就可以和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]

 

 

 

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