作者adam100830 (jumbo100830)
看板DataScience
標題[問題] 取得完整訓練模型的某層輸出
時間Wed May 1 21:33:00 2019
作業系統: 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
→ thefattiger: 不就train完之後第三層的輸出...?05/02 15:55
→ thefattiger: 其實看不是很懂你想問啥,看下面這有沒有幫到你 05/02 15:55
→ sxy67230: 稍微看了一下,你這個是Keras吧,K.function是直接呼叫k05/02 18:34
→ sxy67230: eras call,keras在根據你的當前參數輸出你的對應層數05/02 18:34
→ sxy67230: 輸出05/02 18:34
→ sxy67230: 回到正題,你沒呼叫gradient ,那keras就是依照你的初始 05/02 18:37
→ sxy67230: 參數直接給第三層的output,k.function跟k.gradient都是05/02 18:37
→ sxy67230: keras封裝tensorflow或theano的呼叫。05/02 18:37
→ sxy67230: 如果你今天fit完,在呼叫k.function就是train完的第三層 05/02 18:42
→ sxy67230: 輸出。你用k.gradient疊二十次就是gradient更新你20次訓05/02 18:42
→ sxy67230: 練的第三層輸出。 05/02 18:42
※ 編輯: adam100830 (220.134.198.86), 05/02/2019 19:28:03
推 bulc381: m = Model(model1.inputs, model1.layers[3].output) 05/04 01:45
→ bulc381: y = m.predict(X_train) 沒必要用到backend function 05/04 01:46
→ bulc381: trainX 05/04 01:46
推 goldflower: 同樓上 用兩個model就好 05/05 18:40