Pytorch Error

it2025-03-24  21

 1. Error ::   ‘DataParallel’ object has no attribute ‘~’

class RNN(nn.Module): def __init__(self, input_size, hidden_size, output_size, n_layers=1): super(RNN, self).__init__() self.input_size = input_size self.hidden_size = hidden_size self.output_size = output_size self.n_layers = n_layers self.encoder = nn.Embedding(input_size, hidden_size) self.gru = nn.GRU(hidden_size, hidden_size, n_layers,batch_first = True) self.decoder = nn.Linear(hidden_size, output_size) self.init_hidden(batch_size) def forward(self, input): input = self.encoder(input) output, self.hidden = self.gru(input,self.hidden) output = self.decoder(output.contiguous().view(-1,self.hidden_size)) output = output.contiguous().view(batch_size,num_steps,N_CHARACTERS) #print (output.size())10,50,67 return output def init_hidden(self,batch_size): self.hidden = Variable(T.zeros(self.n_layers, batch_size, self.hidden_size).cuda()) decoder = T.nn.DataParallel(RNN(N_CHARACTERS, HIDDEN_SIZE, N_CHARACTERS), dim=1).cuda() # 在训练的时候,提示错误,AttributeError: 'DataParallel' object has no attribute '...' for epoch in range(EPOCH_): hidden = decoder.init_hidden()

Occur :‘DataParallel’ object has no attribute ‘~’

Solution:When using DataParallel your original module will be in attribute module of the parallel module:

                 简而言之,对象后面需要加个“.module”. 

for epoch in range(EPOCH_): hidden = decoder.module.init_hidden()

2. Error ::   got backend CUDA and dtype Float but  got backend CUDA and dtype Long

   1)检查Tensor变量是否都添加.cuda()

   2)  Tensor变量初始化的时候,以要求的float 型为初始化

         

xs = torch.autograd.Variable(torch.arange(0, h).cuda())

改成

xs = torch.autograd.Variable(torch.arange(0, h).float().cuda())

3. Error:grad can be implicitly created only for scalar outputs

这是因为.backward() 求导的时候,默认只能从标量求导,如下代码中的 J 对 x 求导(一维);

而当从向量求导的时候,就会出现这个错误。如下代码中的 z 对 x求导。

当然,向量也可以求导,具体方法参考:

https://blog.csdn.net/wzx479/article/details/98474847

import torch x = torch.tensor([[1.,2.,3.],[4.,5.,6.]],requires_grad=True) y = x+1 z = 2*y*y # Error #z.backward() #print(x.grad) # Ok #J = torch.mean(z) #J.backward() #print(x.grad)

4. SystemError: <built-in method locked of _thread.lock object at 0x0000025E48D7B9B8> returned a result with an error set

在使用C++调用TensorFlow 或者 Pytorch接口时 ,容易出现的问题。

一开始看到问题也是很头疼,类似 https://blog.csdn.net/qq_36679208/article/details/99671102 

以为是系统线程冲突,改Threading.py 文件。结果发现不行,当陷入绝境的时候,身边的大佬说,那系统屏蔽了没问题,就认为系统没问题(厉害啊,不愧是大佬)。

于是检查文件配置,果不其然,是输入文件的路径换了。因为C++调用python的时候,文件系统的报错不能以人性化的方式显示。

出现这个问题,系统和线程没有问题,检查输入文件路径、格式等。

 

最新回复(0)