作者znmkhxrw (QQ)
看板DataScience
标题[问题] keras rename layer一问~500p
时间Wed Nov 21 01:11:19 2018
想请问一个keras layer中的name参数问题,举例如下:
from keras.layers import Input, Dense
from keras.models import Model
input = Input(shape = (3,))
y = Dense(3, name = "QQ")(input)
y = Dense(3, name = "QQ")(y)
model = Model(input, y)
这会是
错的,因为不能重复命名
但是有没有方法可以让它
自动化遇到重复就自己加index,如 Dense_1, Dense_2...
想要变成 QQ_1, QQ_2....
会有这问题是想解决
#1RyoAJbC (Python) 这篇我po的问题,没人理QQ
如果那篇有直接解法当然最快
但是我目前想不出来
所以退而求其之想要手动算层数
但是block_1,2,3很复杂,没有name的帮助的话很难保证算对
所以我才想要给name帮助我算层数
於是就遇到这个问题....
第一个帮解决的500p~感恩~
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 219.68.160.241
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/DataScience/M.1542733881.A.B86.html
1F:推 yiefaung: "QQ_%d"%layer_num layer_num+=1 11/21 02:50
你意思是model 先建完 再 rename吗?
input = Input(shape = (3,))
y = Dense(3)(input)
y = Dense(3)(y)
model = Model(input, y)
num = 0
for x in model.layers:
x.name = "QQ_%d" % num
num += 1
如果不是的话,如何把你的指令塞到layer里呢?
如果是的话,跟我要的有些出入
我是想要在建每一个layer时就会"
若命名相同则自己index"
因为我要自动index重复命名的是如
#1RyoAJbC (Python) 的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)
而想要让y到y_1所有经过的layer的命名都是"QQ"
谢谢~~
※ 编辑: znmkhxrw (210.242.52.37), 11/21/2018 09:56:24
2F:推 illegalplan: 直接override Model 在init里面检查同名? 11/21 14:01
3F:推 germun: 自己写一个get_name()函式做调整 11/21 14:10
4F:→ germun: 就可以直接使用name=get_name('QQ') 11/21 14:11
5F:→ germun: get_name()里面你可以自己判断, 用个global set或list做记 11/21 14:12
6F:→ germun: 录检查有没有重覆或做counting就好了 11/21 14:13
7F:→ germun: 不太建议用override, 因为一改版可能很多东西都得改掉 11/21 14:14
!!! g大的意思是 写一个 get_name("QQ") 的generator吗??
这样跟他要几次就会得到不同的值
※ 编辑: znmkhxrw (220.128.169.29), 11/21/2018 14:19:29
8F:推 Kazimir: 虽然我不知道怎麽从keras处理 但是tf本身是有给名子的啊 11/21 14:33
9F:→ Kazimir: 都是像 input:0 之类的 11/21 14:34
10F:推 germun: 意思是你自己def一个function, 然後return你加上index的 11/21 14:38
11F:→ germun: string当做你的name,加数字方法就像一楼那样string format 11/21 14:38
12F:推 blackrays: 看要不要改用tensorflow 他会帮你加_0 _1 11/21 14:48
13F:推 germun: tf给的是tensor name, keras本身还有layer name, 不太一样 11/21 14:57
14F:→ germun: name的处理方法你可以去参考class Layer本身对name处理 11/21 14:58
15F:→ germun: 你会看到keras本身就有K.get_uid()来给name做counting已经 11/21 15:00
16F:→ germun: 帮你解决计数问题了 11/21 15:00
原来g大你的global set是那个意思XDD 完全解决我问题 THX~
cnt = 0
def get_name(name):
global cnt
cnt += 1
return name + "_" + str(cnt)
你有空的话顺便帮我看一下 python 板那篇你回的 我有修文做个总结看对不对
500p缝上 感恩~^^
※ 编辑: znmkhxrw (220.128.169.29), 11/21/2018 17:02:27