EncoderRNN DataParellel中的forward函数,batch_first = False

问题描述

我一直在努力解决这个问题,但是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 (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...