我需要澄清一下如何使用torch.nn模块的不同组件正确准备批量培训的输入.具体来说,我正在寻找为seq2seq模型创建编码器 - 解码器网络.
假设我有一个包含这三层的模块,按顺序:
nn.Embeddingnn.LSTMnn.Linearnn.Embedding输入: batch_size * seq_length
输出: batch_size * seq_length * embedding_dimension
我在这里没有任何问题,我只想明确输入和输出的预期形状.
nn.LSTM输入: seq_length * batch_size * input_size(embedding_dimension在这种情况下)
输出: seq_length * batch_size * hidden_size
last_hidden_state: batch_size * hidden_size
last_cell_state: batch_size * hidden_size
要使用Embedding图层的输出作为图层的输入LSTM,我需要转置轴1和2.
我在网上发现的许多例子都有类似的东西x = embeds.view(len(sentence), self.batch_size , -1),但这让我很困惑.该视图如何确保同一批次的元素保留在同一批次中?当尺寸len(sentence)和self.batch尺寸相同时会发生什么?
nn.Linear输入: batch_size x input_size(在这种情况下LSTM的hidden_size或??)
输出: batch_size xoutput_size
如果我只需要last_hidden_state的LSTM话,我可以把它作为输入nn.Linear.
但是,如果我想利用输出(其中包含所有中间隐藏状态),那么我需要改变 …