[問題] TensorFlow網路參數儲存問題

看板Python作者 (HI)時間6年前 (2018/04/23 19:44), 6年前編輯推噓6(6024)
留言30則, 4人參與, 6年前最新討論串1/1
我想將NN的參數儲存下次繼續學習 但發現儲存時似乎發生問題 叫出的參數每次都一樣 我的程式結構如下 還請強者指教 謝謝 class DQ: def __init__(): self.sess = tf.Session() saver = tf.train.Saver() self.sess.run(tf.global_variables_initializer()) with tf.Session() as sess: if os.path.isfile("save_net.ckpt.index"): saver.restore(sess, "save_net.ckpt") print('File exists, loading previous data!') else: # save_path = self.saver.save(self.sess, "save_net.ckpt") print('File does not exist, starting fresh') def _build_net(self): 省略 def learn(self,save_step): saver = tf.train.Saver() with tf.Session() as sess: sess.run(tf.global_variables_initializer()) save_path = saver.save(sess, "save_net.ckpt") print('save parameters') -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.53.213 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1524483897.A.B1B.html ※ 編輯: Paudse (140.112.53.213), 04/23/2018 19:45:34 ※ 編輯: Paudse (140.112.53.213), 04/23/2018 19:46:19

04/24 08:25, 6年前 , 1F
用with的話 你要跟訓練在同一個with裡吧
04/24 08:25, 1F

04/24 08:25, 6年前 , 2F
不然你存參數時候的session應該沒東西
04/24 08:25, 2F

04/24 08:35, 6年前 , 3F
最後的with那行等於一個新的session 你初始化參數後就
04/24 08:35, 3F

04/24 08:35, 6年前 , 4F
直接存 中間應該要有訓練過程
04/24 08:35, 4F

04/24 08:44, 6年前 , 5F
還是你只是想問為何初始化後存的參數會一樣?
04/24 08:44, 5F

04/24 10:38, 6年前 , 6F
恩恩 對阿 初始化參數都會一樣 是為什麼呢 謝謝
04/24 10:38, 6F

04/24 10:39, 6年前 , 7F
甚至我把之前處存的ckpt檔都刪了 跑出來的參數還是一樣
04/24 10:39, 7F

04/24 10:41, 6年前 , 8F
我朋友後來說他會存很多個ckpt 可以設定幾個epoch存一次
04/24 10:41, 8F

04/24 10:41, 6年前 , 9F
要restore最後一個ckpt才是最接近訓練最後的結果
04/24 10:41, 9F

04/24 13:13, 6年前 , 10F
當然啊 你可以看一下tensorflow的文件
04/24 13:13, 10F

04/24 13:16, 6年前 , 11F
saver(max=n) 可以設定要保留幾個檔案
04/24 13:16, 11F

04/24 13:31, 6年前 , 12F
我現在用model_file=tf.train.latest_checkpoint('ckpt/')
04/24 13:31, 12F

04/24 13:31, 6年前 , 13F
saver.restore(sess,model_file)
04/24 13:31, 13F

04/24 13:32, 6年前 , 14F
但還是都從最一開始的開始訓練 不知道是怎麼回事
04/24 13:32, 14F

04/24 13:33, 6年前 , 15F
另外也已經改成saver=tf.train.Saver(max_to_keep=1)
04/24 13:33, 15F

04/24 13:34, 6年前 , 16F
=1代表只存一個吧
04/24 13:34, 16F

04/24 13:34, 6年前 , 17F

04/24 13:34, 6年前 , 18F
照這個做應該就好了
04/24 13:34, 18F

04/24 13:48, 6年前 , 19F
參數初始化的部分可以看這個truncated_normal_initiali
04/24 13:48, 19F

04/24 13:50, 6年前 , 20F
從最一開始的訓練或許是你本來就只有一開始才有存?
04/24 13:50, 20F

04/24 13:51, 6年前 , 21F
直接去github看別人完整的code比較快 看人家怎麼用的
04/24 13:51, 21F

04/24 13:54, 6年前 , 22F
對了 你這個code是不是怪怪的 你一開始就有實體化
04/24 13:54, 22F

04/24 13:54, 6年前 , 23F
session了 為何後面還要with tf.se....
04/24 13:54, 23F

04/24 13:54, 6年前 , 24F
感謝各位的建議 我後來發現 我原本把放在saver.restore
04/24 13:54, 24F

04/24 13:55, 6年前 , 25F
直接self.sess.run就可以了 不然你等於又實體化一個
04/24 13:55, 25F

04/24 13:55, 6年前 , 26F
session
04/24 13:55, 26F

04/24 13:55, 6年前 , 27F
一個if判斷句裡面檢查有沒有之前存的ckpt 但一值失敗
04/24 13:55, 27F

04/24 13:55, 6年前 , 28F
我後來把saver.restore拿出那個if結構外就可以了
04/24 13:55, 28F

04/24 13:56, 6年前 , 29F
雖然不太懂為何會有這個問題 不過現在OK了 感謝大家!!
04/24 13:56, 29F

04/24 14:12, 6年前 , 30F
大大們說的沒錯 我後來把with拿掉了
04/24 14:12, 30F
文章代碼(AID): #1QtSSviR (Python)