[問題] keras rename layer一問~500p

看板DataScience作者 (QQ)時間5年前 (2018/11/21 01:11), 5年前編輯推噓7(709)
留言16則, 5人參與, 5年前最新討論串1/1
想請問一個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://www.ptt.cc/bbs/DataScience/M.1542733881.A.B86.html

11/21 02:50, 5年前 , 1F
"QQ_%d"%layer_num layer_num+=1
11/21 02:50, 1F
你意思是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

11/21 14:01, 5年前 , 2F
直接override Model 在init裡面檢查同名?
11/21 14:01, 2F

11/21 14:10, 5年前 , 3F
自己寫一個get_name()函式做調整
11/21 14:10, 3F

11/21 14:11, 5年前 , 4F
就可以直接使用name=get_name('QQ')
11/21 14:11, 4F

11/21 14:12, 5年前 , 5F
get_name()裡面你可以自己判斷, 用個global set或list做記
11/21 14:12, 5F

11/21 14:13, 5年前 , 6F
錄檢查有沒有重覆或做counting就好了
11/21 14:13, 6F

11/21 14:14, 5年前 , 7F
不太建議用override, 因為一改版可能很多東西都得改掉
11/21 14:14, 7F
!!! g大的意思是 寫一個 get_name("QQ") 的generator嗎?? 這樣跟他要幾次就會得到不同的值 ※ 編輯: znmkhxrw (220.128.169.29), 11/21/2018 14:19:29

11/21 14:33, 5年前 , 8F
雖然我不知道怎麼從keras處理 但是tf本身是有給名子的啊
11/21 14:33, 8F

11/21 14:34, 5年前 , 9F
都是像 input:0 之類的
11/21 14:34, 9F

11/21 14:38, 5年前 , 10F
意思是你自己def一個function, 然後return你加上index的
11/21 14:38, 10F

11/21 14:38, 5年前 , 11F
string當做你的name,加數字方法就像一樓那樣string format
11/21 14:38, 11F

11/21 14:48, 5年前 , 12F
看要不要改用tensorflow 他會幫你加_0 _1
11/21 14:48, 12F

11/21 14:57, 5年前 , 13F
tf給的是tensor name, keras本身還有layer name, 不太一樣
11/21 14:57, 13F

11/21 14:58, 5年前 , 14F
name的處理方法你可以去參考class Layer本身對name處理
11/21 14:58, 14F

11/21 15:00, 5年前 , 15F
你會看到keras本身就有K.get_uid()來給name做counting已經
11/21 15:00, 15F

11/21 15:00, 5年前 , 16F
幫你解決計數問題了
11/21 15:00, 16F
原來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
文章代碼(AID): #1Rz40vk6 (DataScience)