首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >pytorch错误:“预期的isFloatingType(grad.scalar_type()) x (input_is_complex == grad_is_complex)为真,但为假”

pytorch错误:“预期的isFloatingType(grad.scalar_type()) x (input_is_complex == grad_is_complex)为真,但为假”
EN

Stack Overflow用户
提问于 2021-12-21 02:56:21
回答 1查看 100关注 0票数 0

我正在着手实施分类问题。在将复杂噪声插入输出层之前,我的代码工作得很好。

下面的代码不适用于Pytorch错误

代码语言:javascript
复制
def forward(self, x):
    #Encoder Process
    out = self.feature(x)
    out = self.encoder(out)
    out = self.last(out)

    #### Start of error point ######
    batch_size, y = out.size()
    out_real = x[:, 0:int(y / 2)]
    out_comp = x[:, int(y / 2) : y + 1]
    out_comp = out_comp * 1j
    symbols = out_real + out_comp

    n = torch.randn(symbols.shape. dtype=torch.cfloat).to(device) 
    out = symbols + n 
    out_real = out.real 
    out_imag = out.imag 
    out = torch.cat((out_real, out_imag),1)
    #### End of error point ######

    #Decoder process
    out0 = self.decoder0(out)

    out1 = self.decoder1(out0)
    out1 += self.shortcut(out0)

    out2 = self.decoder2(out1)
    out2 += self.shortcut(out1)

在添加### start of error point ### ... ### end of error point ###代码行之前,代码运行良好,分类工作正常。但是,添加代码后,最后一行会出现以下错误:

代码语言:javascript
复制
    ---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-8-a131419c404b> in <module>
      6 for epoch in range(start_epoch, start_epoch+total_epoch):
      7     start = time.time()
----> 8     train(epoch, scheduler)
      9     end = time.time()
     10     total_time += (end-start)

<ipython-input-4-d3b479d83256> in train(epoch, scheduler)
     48         top5 = accuracy(outputs, targets, topk=(1, 5))
     49 
---> 50         loss.backward()
     51         optimizer.step()
     52         scheduler.step(epoch +batch_idx/iters)

~\Anaconda3\envs\1DCNN\lib\site-packages\torch\tensor.py in backward(self, gradient, retain_graph, create_graph)
    219                 retain_graph=retain_graph,
    220                 create_graph=create_graph)
--> 221         torch.autograd.backward(self, gradient, retain_graph, create_graph)
    222 
    223     def register_hook(self, hook):

~\Anaconda3\envs\1DCNN\lib\site-packages\torch\autograd\__init__.py in backward(tensors, grad_tensors, retain_graph, create_graph, grad_variables)
    130     Variable._execution_engine.run_backward(
    131         tensors, grad_tensors_, retain_graph, create_graph,
--> 132         allow_unreachable=True)  # allow_unreachable flag
    133 
    134 

RuntimeError: Expected isFloatingType(grad.scalar_type()) || (input_is_complex == grad_is_complex) to be true, but got false.  (Could this error message be improved?  If so, please report an enhancement request to PyTorch.)

该前向函数在一个复杂的AWGN信道上传输图像。因此,输入x是一个图像。### start of error point ### ... ### end of error point ###部件表示添加的复杂噪声。

这个问题是因为复值是在前向(X)函数的中间加上的,所以学习不起作用吗?

如果输入是真实的,但是我想把复杂的值放在前向函数的中间,那么我该怎么办?

EN

回答 1

Stack Overflow用户

发布于 2021-12-21 07:16:22

我认为这个错误信息是你最不担心的。

你想做什么?当你把你的特征看作是两个真实的部分时,添加复杂的噪声意味着什么?这和给out添加噪音有什么不同?

如果您真的想让您的解码器变得复杂,您应该将out作为一个复张量,并允许解码器的权重和快捷方式也是复杂的。这实际上会在你张量的真实部分和想象部分之间产生相互作用。现在,对于out的真实和想象部分,没有“复杂”的含义,它们只是额外的维度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70430175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档