看板 DataScience 關於我們 聯絡資訊
作業系統: 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
thefattiger: https://reurl.cc/EYlGg05/02 15:58
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