Open pablosun opened 6 years ago
@pablosun ,
在 DecoderRNN.forward() 當中我們定義了輸出為 vocab_size 的最終 Linear output layer。就我的認知,這表示 decoder( input ) 的輸出,要麼是
[batch_size, vocab_size] (有 batch 的情況)
這是正確的。你可以想像這是一個物件辨識像lab1的task,目標有vocab_size
這麼多種class,所以model prediction會有[batch_size, vocab_size]
,代表預測為每個class的機率。而targets只會有[batch_size]
,每個element會介於0到vocab_size-1表示正確的class index。
但是,在 train.py 當中,我們計算 loss 的 criterion(output, target) 的 target 卻是一個 緊密排列的 vocabulary index 的 一維 tensor。
該問題與pack_padded_sequence
的作用有關,基本上可以想成所有timestep的batch,vectorize成一維。[bs, timestep, size] -> [bs*timestep, size]
這樣兩邊的 dimension 感覺沒有辦法對應起來?為什麼 forward() 裡面最後不需要把 output 再轉回 vocabulary index呢?
該問題與第一題的回答有關,至於如何轉成機率跟nn.CrossEntropyLoss()
有關,請見pytorch document。
TA
該問題與pack_padded_sequence的作用有關,基本上可以想成所有timestep的batch,vectorize成一維。[bs, timestep, size] -> [bs*timestep, size]
補充一下這裡[bs*timestep, size]
的時候會把padding的部分去掉,所以其實size不會真的是bs*timestep
助教好,
想請教關於 RNN batch size 的問題。
在
DecoderRNN.forward()
當中我們定義了輸出為vocab_size
的最終 Linear output layer。就我的認知,這表示 decoder( input ) 的輸出,要麼是但是,在
train.py
當中,我們計算 loss 的criterion(output, target)
的 target 卻是一個 緊密排列的 vocabulary index 的 一維 tensor。這樣兩邊的 dimension 感覺沒有辦法對應起來?為什麼 forward() 裡面最後不需要把 output 再轉回 vocabulary index呢?
還是我有什麼地方理解錯誤了呢? 請助教協助解惑,謝謝。