這個錯誤通常是由于在__init__
方法之外對模塊中的某些成員進行了初始化或賦值操作,導致模塊還沒有被完全初始化就已經被調用了。為了解決這個問題,需要將所有的初始化或賦值操作移到__init__
方法內部。
例如,如果有一個自定義模塊MyModule
,并且想要在其中定義一個類變量my_var
,則應該將其放在__init__
方法中:
import torch.nn as nn
class MyModule(nn.Module):def __init__(self, in_features, out_features):super(MyModule, self).__init__()# 將 my_var 初始化為 Noneself.my_var = None# 在 __init__ 方法中將 my_var 進行賦值self.my_var = self._initialize_my_var(in_features, out_features)def forward(self, x):# 使用 my_vary = x * self.my_var# 其他計算def _initialize_my_var(self, in_features, out_features):# 計算 my_varreturn some_function(in_features, out_features)
按照上面的方式,在__init__
方法中進行所有的初始化和賦值操作,確保模塊中的所有成員都在__init__
方法內被正確初始化后再進行調用即可避免出現AttributeError: cannot assign module before Module.__init__() call
錯誤。