有没有人能够在PyCharm中解决PyTorch特定的检查问题?以前针对非PyTorch相关问题的帖子建议升级PyCharm,但我目前处于最新版本。一种选择当然是完全禁用某些检查,但我宁愿避免这种情况。
示例:torch.LongTensor(x)
给了我"意外的参数......",而两个呼叫签名(有和没有x
)都支持。
答案 0 :(得分:3)
我认为这是因为torch.LongTensor
没有找到pycharm的__init__
方法。
根据this source我感谢this SO post:
当您需要控制新实例的创建时,请使用 __ new __ 。 当需要控制新实例的初始化时,请使用 __ init __ 。
__ new __ 是实例创建的第一步。它被称为第一, 并负责返回班级的新实例。在 相比之下, __ init __ 不会返回任何内容;它只负责 在创建实例后初始化它。
一般情况下,除非你是,否则你不应该覆盖 __ new __ 继承一个不可变的类型,如str,int,unicode或tuple。
由于Tensor
是类型,因此仅定义new
和init
是有意义的。
您可以通过测试以下类来试验此行为:
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
,然后查看已定义的方法。