【tensorflow:Google】三、tensorflow入門
【一】計算圖模型
節點是計算,邊是數據流,
a = tf.constant( [1., 2.] )定義的是節點,節點有屬性 a.graph
取得默認計算圖 g1 = tf.get_default_graph()
初始化計算圖 g1 = tf.Graph()
設置default圖 g1.as_default()
定義變量: tf.get_variable(‘v‘)
讀取變量也是上述函數
對圖指定設備 g.device(‘/gpu:0‘)
可以定義集合來管理計算圖中的資源,
加入集合 tf.add_to_collection
獲取集合 tf.get_collection
自動管理一些集合
【二】數據模型——張量
所有的數據都用張量表示,n階張量是n維數據,0維為標量(scalar)
張量中不保存數字,而是計算過程!得到的是對結果的一個引用。(如果還沒run,那麽一定是沒結果的)
主要有三個屬性:
1、名字
2、維度
3、數據類型
命名:節點的名稱 + 是節點的第幾個輸出。節點本身沒有這個數據類型,只有張量這個數據類型。
張量的使用
1、記錄中間計算結果,提高代碼可讀性
2、計算圖構造完成之後,獲得計算結果(需要通過Session) tf.Session().run(result)
【三】運行模型——會話 Session
sess = tf.Session()
兩種等價的表達:
sess.run(result)
result.eval(session = sess)
sess.close()
默認會話機制:
sess = tf.InteractiveSession()
之後.eval()不需要指定session參數
在生成session的過程中也可以使用config來管理,
config = tf.ConfigProto(並行的線程數,GPU分配策略,運算超時時間,)
allow_soft_placement的意思是不支持GPU的時候使用CPU。
log_device_placement是記錄每個節點被安排在哪個設備上,方便測試。
【四】利用tensorflow實現神經網絡
前向傳播算法簡介:就是一步一步傳過來。。。完全沒說參數是怎麽訓練的。。。
tf.Variable生成變量
tf.random_xxx是隨機數生成函數
tf.matmul()矩陣乘法
前向傳播過程:
1、定義變量、常量、矩陣乘法
2、初始化變量: sess.run(w1.initializer)
另外的方案:使用 init_op = tf.initialize_all_variables() sess.run(init_op)來實現。
3、運行: sess.run(y)
變量是張量的一個特殊形式,一般有 .assign和.read方法,分別實現寫/讀功能
變量一般分兩種:
1、可訓練的:神經網絡權重
2、不可訓練:叠代輪數
優化算法的默認優化對象是tf.GraphKeys.TRAINABLE_VARIABLES裏面的變量。
變量類型不可改變,但是變量維度可以改變
改變方式為 assign的時候加入參數 validate_shape=False
訓練流程:
placeholder機制:定義一個位置,需要在程序運行的時候填充數據,
計算前向傳播結果的偽代碼:
init 權重variable
init x placeholder
init a = tf.matmul(x, w1)
sess = Session()
init_op = init_all
sess.run(init_op)
sess.run(y, feed_dict={x: [0.1, 0.2]})
接下來定義損失函數、反向傳播算法
實現一個簡單的神經網絡解決手寫數字識別問題!
【tensorflow:Google】三、tensorflow入門