作者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/m.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