Tensorflow學習筆記:Tensorflow基礎複習
#tensorflow圖操作
1、graph = tf.get_default_graph()獲取預設圖,返回圖所在的記憶體空間
2、new_graph = tf.Graph() 建立新圖
with new_graph.as_default(): #使用上下文環境
c = tf.constant(11.0)
3、一張圖包含了一組op和tensor
op:只要使用tf的API定義的函式介面都是op
tensor:就是指代資料,有的op內部裝有tensor
#tensorflow前端系統與後端系統
前端系統:定義圖的結構
後端系統:會話:執行圖的結構,分配cpu與gpu資源,掌控資源(TF變數生命週期、佇列、執行緒)
#session.run()
用session.run()啟動一個圖的執行,用sess.close()釋放記憶體
使用上下文管理器執行會話,結束後自動呼叫sess.close()釋放資源
with tf.Session() as sess:
sess.run()
sess內的引數congif = tf.ConfigProto(log_device_placement = True)
#變數的eval函式
有了上下文函式,就可以使用a.eval()來run出a的值
#會話的run函式
run([])如果需要計算多個op,需要用列表傳入
不能執行非op,如python自帶的int
可以用int + op,比如a = 3,b = tf.constant(2)+a,則b是op
#feed_dict
可以給變數賦不同的值給placeholder,用於實時提供資料進行訓練
#placeholder(一種op)
placeholder(dtype,shape = None,name = None)
比如
a = tf. placeholder(float32,[2,3])
with tf.Session() as sess:
sess.run(a,feed_dict = {a:[[1,2,3],[4,5,6]]})
行數不確定,用None代替,傳入時可以傳入多組數量不定的資料
#張量的階
一個型別化的資料格式tf.Tensor()
張量存在於一個op中,有三個重要引數
Tensor("op_name:0",shape,dtype)
#資料型別dtype
tf.float32 float64 #float64其實會被轉化成float32,並沒有實際意義
tf.int64 int32 int16 int8 uint8 #一般用int32
tf.string 長度可變的字元陣列
#張量的屬性
graph
op
name
shape
#shape講解
維數 列印結果
0 ()
1 (5)
2 (5,7)
3 (?,3,4)
... ...
列印問好則未固定
#shape的動態修改和靜態修改
靜態修改
tf.Tensor.get_shape()獲取形狀
tf.Tensor.set_shape()靜態設定形狀
對於靜態形狀而言,一旦形狀確定(沒有None)則不能再改變,且維度也不能修改
動態修改
tf.reshape()
元素總量不能改變,否則多餘的資料和少的資料無法處理或補全
對於元素數量未定的張量,可以將之更改為任意型別的張量
#張量操作->生成張量
tf.zeros(shape,dtype,name=None)
tf.ones(shape,dype,name=None)
建立隨機值張量
tf.random_normal(shape,mean,stddev=1.0,dtype=tf.float32,seed=None,name=None)
#張量資料型別轉換
tf.cast(src,dtype,name=None)
#張量合併
tf.concat((value1,value2...),axis = 0)
#axis代表用行還是列拼接
#變數tf.Variable()
也是一種op,是一種特殊的張量,預設能夠被訓練
#變數的建立
tf.Varibale(initial_value = None,name=None,trainable = True)
#變數的初始化
init_op = tf.global_variables_initializer()
sess.run(init_op)
#視覺化tensorboard
tf.summery.FileWriter('path',graph=x) #x可以是get_default_graph得到的,也可以是一個圖中變數a.graph得到的;path是路徑名,不是檔名,檔名由程式決定
然後命令列下輸入
tensorboard --logdir="C:\Users\xie\event"
路徑下如果有多個檔案,預設取最新的檔案
op節點都有name引數,用於設定在tensorboard中顯示的名字