簡體   English   中英

如何在 FluxML (Julia Lang) 中實現一對多 RNN?

[英]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/的文檔來看,這似乎沒有實現.

  • 這樣的架構應該如何在 Flux ML 中實現?
  • 當在Chain中使用 RNN 單元時,例如Chain(rnn1,rnn2,rnn3) Chain 是將 output 向量 (y) 傳遞到后續 rnn 單元的輸入還是隱藏的 state(或兩者)?
  • RNN 或 Flux.RNNCell 如何在不同的上下文中以及在 Chain 或 model 的上下文中使用?

假設目標是在第 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM