→ jackwang01: 嗯...block2多加一個參數控制trainable? 11/21 01:32
這個我試過了,好像有BUG,應該說是keras自己的設定
當初我train時全部的layer都是True
而晚上我就故意建一個一模一樣的model,只是block_2裡面layer都給trainable = False
之後再load_weights應該就可以了
結果是失敗的!
整個超不合理的,等於是說我用全部trainable = True的model下去train,
之後建回來一樣的model時連trainable都要設定一樣才能load_weights...
但是明明毫無關係阿
後來上google找,有人有相同的問題:https://goo.gl/1v8rYz
他是model = Res50 + self_layer, train時把Res50的trainable改成False
之後要load回來fine tune時,必須建一個Res50的trainable = False的同model才能load
這個能解掉的話也是一個方法...
或是 #1Rz40vk6 (DataScience) 的問題如果有解也是一種方法
※ 編輯: znmkhxrw (219.68.160.241), 11/21/2018 01:42:02
推 germun: trainable會影響model取weights的順序 11/21 04:10
→ germun: 加name是最簡單啦...雖然我覺得改寫成model比較省事 11/21 04:19
→ germun: 至育weights的問題你用model.weights檢查一下就知道了 11/21 04:20
→ germun: 順序有變又不想重train的話,就list對照一下順序調整就好.. 11/21 04:21
原來順序會變....所以真的當時train前的default tranability setting是怎樣時
load_weights時所建的model也要跟當初save weights有相同的default tranability??
不過因為block_2涵蓋超多layer 逐個調weight順序好像有點血尿XDDD
學了一課 THX~
→ germun: 因為不論存取weights都是照list的順序去擺的, 另外我記得 11/21 14:28
→ germun: 即使你塞的是model也不影響你weights取出來的list, 應該是 11/21 14:29
→ germun: tainable改順序的關係讓你誤以為是model的問題 11/21 14:29
→ germun: 而順序會變是因為keras在取weights時會把能train跟不能 11/21 14:30
→ germun: train的weights分開取出來再concat起來 11/21 14:30
所以,假設一個model有3個layer:
(1)trainable 分別為 T F T
(2)trainable 分別為 T T T
這兩個在save_weights時,存的順序順序是不一樣的
如果是在(1)的情況下存
之後要load_weights時,即便建同樣的model,trainable 一定也要先給 T F T 後
才能load成功?
※ 編輯: znmkhxrw (220.128.169.29), 11/21/2018 14:39:27