AttributeError: cannot assign module before Module.init() call 问题解决
在使用自定义模块时出现以下问题:
出现此问题的原因大概率是在自定义类中缺少super() 函数,例如
class simpleNet(nn.Module):
def __init__(self, in_dim, n_hidden_1, n_hidden_2, out_dim):
self.layer1 = nn.Linear(in_dim, n_hidden_1)
self.layer2 = nn.Linear(n_hidden_1, n_hidden_2)
self.layer3 = nn.Linear(n_hidden_2, out_dim)
修改后如下
class simpleNet(nn.Module):
def __init__(self, in_dim, n_hidden_1, n_hidden_2, out_dim):
super(simpleNet, self).__init__()
self.layer1 = nn.Linear(in_dim, n_hidden_1)
self.layer2 = nn.Linear(n_hidden_1, n_hidden_2)
self.layer3 = nn.Linear(n_hidden_2, out_dim)
但在修改后仍然报同样的错
以下方法或许可以解决问题:
1.在主代码所在目录新建一个文件夹
2.将引用的自定义类所在Python文件移入这个新文件夹
3.在新文件夹中添加__init__.py空文件
比如,将simpleNet 所在的net.py和空文件 __init__.py 放在文件夹mypy下,然后在主代码中重新加载该模块,问题解决。
from mypy import net