1. 程式人生 > >【tensorflow:Google】三、tensorflow入門

【tensorflow:Google】三、tensorflow入門

als 管理 神經網絡 等價 問題 sign ria init 節點

【一】計算圖模型

節點是計算,邊是數據流,

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入門