问题描述
我一直在努力解决这个问题,但是Pytorch似乎没有任何文档可以帮助我。我正在尝试使用编码器RNN在具有2个GPU的系统上执行DataParallel处理。到目前为止,我不想更改代码以使其与batch_first = True一起使用 以下是我的Encoder RNN模块中的代码段。
def forward(self,input_seq,input_lengths,hidden=None):
# Convert word indexes to embeddings
embedded = self.embedding(input_seq)
# Get the longest sequence size - We need this for multi GPU training.
total_length = input_lengths.cpu().numpy()[0]
# Pack padded batch of sequences for RNN module
packed = torch.nn.utils.rnn.pack_padded_sequence(embedded,enforce_sorted=False)
# Forward pass through GRU
outputs,hidden = self.gru(packed,hidden)
# Unpack padding
outputs,_ = torch.nn.utils.rnn.pad_packed_sequence(outputs,total_length=total_length)
# Sum bidirectional GRU outputs
outputs = outputs[:,:,:self.hidden_size] + outputs[:,self.hidden_size:]
# Return output and final hidden state
return outputs,hidden
现在我在total_length = input_lengths.cpu()。numpy()[0]行中拥有最大的序列长度,恰好等于5。
我似乎无法完成这项工作。 PyTorch says
的文档此外,当批次尺寸变暗时,需要格外小心 1(即batch_first = False)具有数据并行性。在这种情况下, pack_padded_sequence padding_input的第一个参数将具有形状 [T x B x *]并且应沿1散开,但第二个散开 参数input_lengths的形状为[B],应分散 沿dim0。操纵张量形状的额外代码将是 需要。
所以目前我不确定什么是正确的Tensor运算/排列以正确实现
嵌入的形状为[5 32 36],其中5为最大序列长度
谢谢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)