[問題] 取得完整訓練模型的某層輸出

看板DataScience作者 (jumbo100830)時間5年前 (2019/05/01 21:33), 5年前編輯推噓2(2014)
留言16則, 4人參與, 5年前最新討論串1/1
作業系統: Win 10 問題類別: ML, RNN, GRU 使用工具: Python3, Keras 問題內容: 想請問各位大大: 最近在嘗試不同的時間序列模型,架構如下圖。 想請問如果我先將Input輸入,並且訓練完完整的模型,再將Input輸入第二次,然後想要 取得第三層(也就是下圖綠色那層GRU)的輸出,我應該怎麼拿? 而且我將Input輸入第二次時,不希望第一層和第二層GRU的神經元權重被更改。 https://i.imgur.com/piVLJ8n.jpg
也就是我要將資料丟入訓練好的完整模型,但我只要資料到第三層的時候的輸出。 我目前的Code: 完整的模型架構如下: ## Input Layer input = Input(shape=(look_back,trainX.shape[2]),name='M1_input') ## Hidden Layer Layer1 = GRU(64, return_sequences=True, name='M1_GRU1')(input) Layer2 = GRU(32, return_sequences=True, name='M1_GRU2')(Layer1) Layer3 = GRU(16, return_sequences=True, name='M1_GRU3')(Layer2) Layer4 = GRU(32, return_sequences=True, name='M1_GRU4')(Layer3) Layer5 = GRU(64, name='M1_GRU5')(Layer4) ## Output Layer output = Dense(69,activation='relu', name='M1_output')(Layer5) model1 = Model(inputs=input,outputs=output) ## Model compile model1.compile(loss='mean_absolute_error', optimizer='adam',metrics=['mse','ma pe']) model1.summary() 我取用第三的輸出方式如下: mid_layer1 = K.function([model1.layers[0].input], [model1.layers[3].output]) mid_layer1_train_output = mid_layer1([trainX])[0] 想請問我這樣拿到的是『完整訓練過一次的第三層輸出』,還是『訓練到第三層的時候的 輸出』? 如果是訓練到第三層的時候的輸出,我應該要怎麼要取得『完整訓練過一次的第三層輸出 』? 我是不是需要用到Freeze Layer之類的用法? 請各位大大指導,謝謝!!! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.134.198.86 ※ 文章網址: https://www.ptt.cc/bbs/DataScience/M.1556717582.A.1E8.html ※ 編輯: adam100830 (220.134.198.86), 05/01/2019 21:33:45

05/02 15:55, 5年前 , 1F
不就train完之後第三層的輸出...?
05/02 15:55, 1F

05/02 15:55, 5年前 , 2F
其實看不是很懂你想問啥,看下面這有沒有幫到你
05/02 15:55, 2F

05/02 15:58, 5年前 , 3F
05/02 15:58, 3F

05/02 18:34, 5年前 , 4F
稍微看了一下,你這個是Keras吧,K.function是直接呼叫k
05/02 18:34, 4F

05/02 18:34, 5年前 , 5F
eras call,keras在根據你的當前參數輸出你的對應層數
05/02 18:34, 5F

05/02 18:34, 5年前 , 6F
輸出
05/02 18:34, 6F

05/02 18:37, 5年前 , 7F
回到正題,你沒呼叫gradient ,那keras就是依照你的初始
05/02 18:37, 7F

05/02 18:37, 5年前 , 8F
參數直接給第三層的output,k.function跟k.gradient都是
05/02 18:37, 8F

05/02 18:37, 5年前 , 9F
keras封裝tensorflow或theano的呼叫。
05/02 18:37, 9F

05/02 18:42, 5年前 , 10F
如果你今天fit完,在呼叫k.function就是train完的第三層
05/02 18:42, 10F

05/02 18:42, 5年前 , 11F
輸出。你用k.gradient疊二十次就是gradient更新你20次訓
05/02 18:42, 11F

05/02 18:42, 5年前 , 12F
練的第三層輸出。
05/02 18:42, 12F
※ 編輯: adam100830 (220.134.198.86), 05/02/2019 19:28:03

05/04 01:45, 5年前 , 13F
m = Model(model1.inputs, model1.layers[3].output)
05/04 01:45, 13F

05/04 01:46, 5年前 , 14F
y = m.predict(X_train) 沒必要用到backend function
05/04 01:46, 14F

05/04 01:46, 5年前 , 15F
trainX
05/04 01:46, 15F

05/05 18:40, 5年前 , 16F
同樓上 用兩個model就好
05/05 18:40, 16F
文章代碼(AID): #1SoQ0E7e (DataScience)