tensorflow筆記系列:
(一) tensorflow筆記:流程,概念和簡單代碼注釋
(二) tensorflow筆記:多層CNN代碼分析
(三) tensorflow筆記:多層LSTM代碼分析
(四) tensorflow筆記:常用函數說明
(五) tensorflow筆記:模型的保存與訓練過程可視化
(六)tensorflow筆記:使用tf來實現word2vec
保存與讀取模型
在使用tf來訓練模型的時候,難免會出現中斷的情況。這時候自然就希望能夠將辛辛苦苦得到的中間參數保留下來,不然下次又要重新開始。好在tf官方提供了保存和讀取模型的方法。
保存模型的方法:
# 之前是各種構建模型graph的操作(矩陣相乘,sigmoid等等....) saver = tf.train.Saver() # 生成saver with tf.Session() as sess: sess.run(tf.global_variables_initializer()) # 先對模型初始化 # 然后將數據丟入模型進行訓練blablabla # 訓練完以后,使用saver.save 來保存 saver.save(sess, "save_path/file_name") #file_name如果不存在的話,會自動創建
將模型保存好以后,載入也比較方便,如下所示:
saver = tf.train.Saver() with tf.Session() as sess: #參數可以進行初始化,也可不進行初始化。即使初始化了,初始化的值也會被restore的值給覆蓋 sess.run(tf.global_variables_initializer()) saver.restore(sess, "save_path/file_name") #會將已經保存的變量值resotre到 變量中。
簡單的說,就是通過saver.save來保存模型,通過saver.restore來加載模型
使用tensorboard來使訓練過程可視化
tensorflow還提供了一個可視化工具,叫tensorboard.啟動以后,可以通過網頁來觀察模型的結構和訓練過程中各個參數的變化。如下圖所示
關於如何合理清楚的顯示網絡結構,我目前還不太搞得清楚,而且目前看來也不是太重要;但是要將訓練的過程可視化還是比較方便的。簡單的說,流程如下所示:
- 使用tf.scalar_summary來收集想要顯示的變量
- 定義一個summury op, 用來匯總多個變量
- 得到一個summy writer,指定寫入路徑
- 通過summary_str = sess.run()
# 1. 由之前的各種運算得到此批數據的loss loss = ..... # 2.使用tf.scalar_summary來收集想要顯示的變量,命名為loss tf.scalar_summary('loss',loss) # 3.定義一個summury op, 用來匯總由scalar_summary記錄的所有變量 merged_summary_op = tf.merge_all_summaries() # 4.生成一個summary writer對象,需要指定寫入路徑,例如我這邊就是/tmp/logdir summary_writer = tf.train.SummaryWriter('/tmp/logdir', sess.graph) # 開始訓練,分批喂數據 for(i in range(batch_num)): # 5.使用sess.run來得到merged_summary_op的返回值 summary_str = sess.run(merged_summary_op) # 6.使用summary writer將運行中的loss值寫入 summary_writer.add_summary(summary_str,i)
接下來,程序開始運行以后,跑到shell里運行
$ tensorboard --logdir /tmp/logdir
開始運行tensorboard.接下來打開瀏覽器,進入127.0.0.1:6006
就能夠看到loss值在訓練中的變化值了。