[英]How to implement a One to Many RNN in FluxML (Julia Lang)?
在 Python 和 TensorFlow 和 Pytorch 中有大量關於如何創建各種 RNN 架構的示例,其中包括一對多架構。 問題是如何使用 Julia Lang 在FluxML
中完成此操作。 Keras 在 TensorFlow 中,RNN 單元的return_sequences
選項允許傳播狀態,但是從 FluxML https://fluxml.ai/Flux.jl/stable/models/recurrence/的文檔來看,這似乎沒有實現.
Chain
中使用 RNN 單元時,例如Chain(rnn1,rnn2,rnn3)
Chain 是將 output 向量 (y) 傳遞到后續 rnn 單元的輸入還是隱藏的 state(或兩者)?假設目標是在第 1 步設置單個輸入產生 2 個 y_hat 輸出,因此 1 對多是 1 對 2 的 recurrence.network。
因此 model 輸入 X 維度必須具有與 y_hat 輸出一樣多的維度,以便每個單元格的輸出在接下來的后續步驟中成為新的 x 輸入(隱藏組件不會直接更改)。 一個可能的 model 是(注意輸入 dims 和 output dims 是相等的)
rnn_model = Chain( LSTM(feature_length=>12) , Dense( 12 => feature_length, sigmoid) , softmax )
在訓練循環中,可以通過匯總單元嘗試預測序列步驟結果的每個步驟的損失來找到梯度和損失。 關鍵是對於一對多,必須將 y_hat 定向為后續步驟中的后續 x 輸入,以便 y_hat1 變為 x_2。 這是一個小例子,其中 x_batch 數據是來自一組獨立樣本的第一個輸入數據,y_tensor 是第 3 個暗淡索引的 2 個步驟的目標數據
Flux.reset!( rnn_model )
loss_tmp, grads = Flux.withgradient( rnn_model ) do model
loss = 0
y_hat1 = rnn_model( x_batch )
loss += Flux.crossentropy( y_hat1 , y_tensor[:,:,1] )
y_hat2 = rnn_model( y_hat1 )
loss += Flux.crossentropy( y_hat2 , y_tensor[:,:,2] )
return loss
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.