PyCharm中的PyTorch特定检查问题

时间:2017-06-13 13:16:00

标签: pycharm pytorch

有没有人能够在PyCharm中解决PyTorch特定的检查问题?以前针对非PyTorch相关问题的帖子建议升级PyCharm,但我目前处于最新版本。一种选择当然是完全禁用某些检查,但我宁愿避免这种情况。

示例:torch.LongTensor(x)给了我"意外的参数......",而两个呼叫签名(有和没有x)都支持。

1 个答案:

答案 0 :(得分:3)

我认为这是因为torch.LongTensor没有找到pycharm的__init__方法。

根据this source我感谢this SO post

  

当您需要控制新实例的创建时,请使用 __ new __ 。   当需要控制新实例的初始化时,请使用 __ init __

     

__ new __ 是实例创建的第一步。它被称为第一,   并负责返回班级的新实例。在   相比之下, __ init __ 不会返回任何内容;它只负责   在创建实例后初始化它。

     

一般情况下,除非你是,否则你不应该覆盖 __ new __   继承一个不可变的类型,如str,int,unicode或tuple。

由于Tensor是类型,因此仅定义newinit是有意义的。

您可以通过测试以下类来试验此行为:

torch.LongTensor(1)  # Unexpected arguments

生成警告,而以下情况不会。

class MyLongTensor(torch.LongTensor):
    def __init__(self, *args, **kwargs):
        pass

MyLongTensor(1)  # No error

要确认缺少__init__是罪魁祸首,请尝试:

class Example(object):
    pass

Example(0)  # Unexpected arguments

要自行查找,请在Ctrl+click然后LongTensor上使用pycharm _TensorBase,然后查看已定义的方法。