1. 程式人生 > >Tensorflow學習筆記:Tensorflow基礎複習

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中顯示的名字