作者znmkhxrw (QQ)
看板Python
标题[问题] keras trainable 快速设定 500p
时间Tue Nov 20 04:52:33 2018
想请问一个型如以下的model:
input = Input(shape = (None, None, 3))
y = block_1(input)
y_1 = block_2(y)
y_2 = block_3(y)
y_3 = Concatenate()([y_1, y_2])
model = Model(input, y_3)
有没有办法
不用summary算层数在model build起来後
直接设定y_1 = block_2(y)的trainable为False
其中
block_1,2,3 都不是 Model class
会有这问题是因为当初因为block_1,2,3很复杂就没逐一设name
原本想要硬算层数,但是summary出来发现因为
y_2, y_3都有吃到y,所以summary的layer
是平行对称下来的,但是又有不对称的地方,算完也不太确定是否正确
不知道是否有一劳永逸的方法?
虽然把block改写成 Model class是一解,但是原本的架构已经train完了
尝试改写成 Model class就load不进去原本train好的weights....
因为 Model class会被当成一整大层的layer,整体变一层 就对不上了QQ
感谢帮忙~第一个解决的500p致谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 219.68.160.241
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1542660755.A.94C.html
※ 编辑: znmkhxrw (219.68.160.241), 11/20/2018 04:53:09
1F:→ 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
2F:推 germun: trainable会影响model取weights的顺序 11/21 04:10
3F:→ germun: 加name是最简单啦...虽然我觉得改写成model比较省事 11/21 04:19
4F:→ germun: 至育weights的问题你用model.weights检查一下就知道了 11/21 04:20
5F:→ germun: 顺序有变又不想重train的话,就list对照一下顺序调整就好.. 11/21 04:21
原来顺序会变....所以真的当时train前的default tranability setting是怎样时
load_weights时所建的model也要跟当初save weights有相同的default tranability??
不过因为block_2涵盖超多layer 逐个调weight顺序好像有点血尿XDDD
学了一课 THX~
6F:→ germun: 因为不论存取weights都是照list的顺序去摆的, 另外我记得 11/21 14:28
7F:→ germun: 即使你塞的是model也不影响你weights取出来的list, 应该是 11/21 14:29
8F:→ germun: tainable改顺序的关系让你误以为是model的问题 11/21 14:29
9F:→ germun: 而顺序会变是因为keras在取weights时会把能train跟不能 11/21 14:30
10F:→ 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