tensorflow新手入門學習筆記
tensorflow新手入門學習筆記
入門基本內容
tensorflow是一個很有意思的框架。tensor是這個框架裡的一個主要的資料型別,本質類似一個多維陣列。框架的主體是圖,一般只使用預設圖即可。高階用法可以管理多個圖。在這個框架中所有運算(option)都是一個節點,資料(tensor)就在不同的節點間流動(flow),通過運算髮生改變,這就是tensorflow名稱的由來。在建立階段,將需要的節點加入圖中,之後通過圖呼叫不同節點進行運算。不同節點之間是並行執行的。
option
option即節點,就像是一個函式,資料傳進來,然後返回運算後的結果。
新增option的語法為 y = tf.option(x1,x1,…,xn)。
其中輸入輸出均為tensor,一般輸入都是其他option的輸出。如果需要使用臨時
x1 = tf.placeholder(tf.types.float32)
這行程式碼就建立了一個float32型別的臨時tensor,實際使用時需要給input1臨時賦值,使用feed語句。
feed_dict={x1:[7.]}
完整程式碼示例如下:
x1 = tf.placeholder(tf.types.float32) #建立一個臨時tensor
x2 = tf.constant(3.0) #建立一個返回常量的option
y = tf.add(x1 , x2) #建立一個執行加法的option
feed語句在呼叫時使用,後面講。
變數
在tensorflow中使用tf.Variable建立變數:
#建立一個值為0,名字為“one_variable”的變數
x = tf.Variable(0, name = "one_variable")
變數有很多操作,因為剛入門,只寫最簡單的賦值操作:
x = tf.Variable(0., name = "one_variable") #建立變數
value = tf.constant(2.0) #建立常量
update = tf.assign(x, value) #用value給x賦值,注意要型別相同
框架的啟動
tensorflow框架的主體是圖,程式的運算節點都是新增在圖裡的,在執行時通過圖取得節點的運算結果。
sess = tf.Session() #建立圖物件,沒有引數的預設情況下啟動預設圖
要通過圖取得節點的運算結果,就要了解tensorflow中的fetch概念。
fetch英文原義是去某個地方取得某個東西,這裡的意思也類似。fetch指從圖中獲取某一個或者某幾個節點的運算結果。
程式碼如下:
x1 = tf.constant(2.0) #一個返回常量值的節點
x2 = tf.constant(3.0) #另一個返回常量值的節點
sess = tf.Session() #建立圖物件
y = sess.run(x1) #執行圖,取得x1值並返回,即fetch
print(y) #輸出y
#輸出結果:2.0
y = sess.run([x1, x2]) #執行圖,取得x1, x2值並返回,即fetch
print(y) #輸出y
#輸出結果:[2.0, 3.0]
需要注意的是,在圖中節點沒有先後順序,是並行的。fetch時,圖會自動執行所有涉及到的節點,一次取回所有結果。
下面就附上入門篇比較完整的程式碼,慶祝自己又熟練掌握了一種“Hello, World!”:
import tensorflow as tf
#基本變數與常量節點定義
hello = tf.constant('Hello, World!')
one = tf.constant(1.0)
three = tf.constant(3.0)
temp = tf.placeholder(tf.float32)
variable = tf.Variable(0.0, name = 'counter')
#主要計算節點定義
add_one_three = tf.add(one, three)
add_variable_one = tf.add(variable, one)
add_one_temp = tf.add(one, temp)
update = tf.assign(variable, add_variable_one)
#初始化節點,有變數時需要
init_op = tf.global_variables_initializer()
#建立圖物件
sess = tf.Session()
#初始化
sess.run(init_op)
#計算與輸出
y = sess.run(hello)
print(y)
#輸出:b'Hello, World'
y = sess.run([one, three])
print(y)
#輸出:[1.0, 3.0]
y = sess.run(add_one_three)
print(y)
#輸出:4.0
y = sess.run(add_one_temp, feed_dict = {temp: 9.0})
print(y)
#輸出:10.0
for i in range(3):
sess.run(update)
y = sess.run(variable)
print(y)
#輸出:
#1.0
#2.0
#3.0
#關閉圖
sess.close()
tensorflow執行時兩個警告消除方法
在跑demo的過程中一直有兩個警告,雖然沒有什麼影響,但是還是很不舒服,一頓操作後終於解決了這兩個問題。
FutureWarning: Conversion of the second argument of issubdtype from float
to np.floating
is deprecated. In future, it will be treated as np.float64 == np.dtype(float).type
.
這個是庫裡h5py包版本過舊,更新即可,使用命令:
pip install h5py==2.8.0rc1
更新後警告就消失了。
Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2
這個是因為tensorflow支援對cpu的優化,但是預設安裝的tensorflow都是X86_64的SIMD版本,跟AVX2的SIMD版本cpu指令集不同。
解決辦法就是先解除安裝現有的tensorflow,使用指令:
pip uninstall tensorflow
然後在github上找到自己版本的tensorflow下載。
連結如下:
windows
其他作業系統
我下載的是1.12.0\py36\CPU\avx2,因為我的python版本是3.6,之後使用指令:
pip install tensorflow-1.12.0-cp36-cp36m-win_amd64.whl
重新安裝下載的tensorflow即可。
注:下載不同版本的tensorflow使用的安裝指令也不同,先在cmd中進入下載檔案所在的目錄再使用指令安裝,不然會找不到檔案。