tensorflow-0.基本概念
Tensorflow基本概念
-
tensorflow兩個版本差異
CPU:綜合能力強,處理各種事務
GPU:專注計算,計算單元多
所以如果顯示卡支援的話,GPU版本會執行的更快 -
執行有CPU加速建議的warning
如果是通過pip自動安裝的tensorflow,執行時會有建議開啟cpu加速的提示,關閉的方法:
import os
os.environ[‘TR_CPP_MIN_LOG_LEVEL’]=‘2’
3. tensorflow基本結構
tensor:張量,就是tensorflow的基本資料型別,實質內部時numpy中 ndarray的再封裝
operation(op):專門運算的操作結點,所有操作都叫op
graph:圖,表示整個程式結構,各圖之間互不干擾
session:會話,所有操作都需要通過會話執行
variavle:變數,tensorflow中的一個op,預設可以訓練
4. 圖
預設圖:獲取:g=tf.get_default_graph() 建立新圖:
g=tf.Graph()
with g.as_default():
pass #此內操作不再對其他圖產生影響
5. 會話
一次只能執行一個圖
with tf.Session(graph=g) as sess:
pass #對g圖進行操作,如果Session()中引數不填寫,則對預設圖進行操作
列印某張量的值
p=sess.run(sum) #或則 p=sum.eval()
print§
6. 會話的run()方法
run(fetches, feed_dict=None, graph=None)
引數介紹:
張量/op的元組、列表或字典
用來覆蓋指定張量的值,給placeholder使用
plt=tf.placeholder(tf.float32, [2,3])
… # 開啟會話
sess.run(plt,feed_dict={plt:[[1,2,3],[4,5,6]]})
返回值異常的原因:
RuntimeError:Session可能處於無效狀態,例如已關閉
TypeError:不適合的型別
ValueError:值無效或則tensor不存在
7. 張量
依賴於numpy的ndarray,一個型別化的N階陣列(tf.Tensor)
三部分組成:名字、形狀、型別
形狀:0維:()、1維:(1)、2維:(2, 2)、3維(3, 3, 3) 如果某一維數量不確定可用?代替
修改形狀:
靜態形狀:
plt = tf.placeholder(tf.float32, [None, 3])
plt.set_shape([3,3])
如設定為[3,4]會報錯,金泰只能對未確認的位置進行固定
動態形狀
plt_reshape = tf.reshape(plt, [3,4])
會生成一個新的tensor,而靜態形狀是直接修該原資料
- 生成張量
固定型別:
tf.zeros(shape, dtype=tf.float32, name=None):全0
tf.ones(shape, dtype=tf.float32, name=None):全1
tf.constant(value, dtype=tf.float32, shpe=None, name=None):常量
隨機型別:
tf.random_normal(shape,mean=0,stddev=1.0,dtype=float32,seed=None,name=None) 滿足正態分佈的隨機值
tf.truncated_normal(shape,mean=0,stddev=1.0,dtype=float32,seed=None,name=None) 滿足不超過兩個標準差的的隨機值
9. 型別轉換
a=tf.cast(x, dtype, name=None) 將x轉換為dtype賦給a
-
切片與擴充套件
c=tf.concat([a,b],axis=1) 將a,b按axis=1方向合併 -
變數建立
a=tf.Variable(initial_value=None,name=None,trainable=True)
a.assign(value) 為變數賦初值
a.eval(session=Node) 計算並返回值
a.name 返回變數名
注意:
變數能夠持久化儲存,普通張量不行
執行前鼻部初始化
13. 視覺化Tensorboard
在Session中生成events檔案 tf.summary.FileWriter(‘路徑不包括檔名’,graph=?)
命令列啟動 tensorboard --logdir=‘路徑不包括檔名’
按照命令列提示開啟url