我尝试过不初始化__init__函数中的权重,会发生什么。结果是网络无法收敛。因此,有必要在构造函数中初始化您的模型。下面是一个例子。
这里我构建一个简单的模型.
from torch import nnclass simpleModel(nn.Module):def __init__(self):super(simpleModel,self).__init__()self.conv1 = nn.Conv2d(3,32,3,1,0)self.conv2 = nn.Conv2d(32,64,3,2,1)layers = [nn.AvgPool2d(7,7,0),nn.Linear(64,10)]self.layers = nn.Sequential(*layers)def forward(self, batch):out = self.conv1(batch)out = self.conv2(batch)out = self.layers(out)return outmodel = simpleModel()
print(model)'''
simpleModel((conv1): Conv2d(3, 32, kernel_size=(3, 3), stride=(1, 1))(conv2): Conv2d(32, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1))(layers): Sequential((0): AvgPool2d(kernel_size=7, stride=7, padding=0)(1): Linear(in_features=64, out_features=10, bias=True))
)
'''
note that I don't initialize weight. now I do it .
#initfor m in self.modules():if isinstance(m,nn.Conv2d):m.weight.data.normal_(0,0.02)m.bias.data.fill_(0)if isinstance(m,nn.Linear):m.weight.data.normal_(0,0.02)m.bias.data.fill_(0)
add this paragraph befor forward function
another lime light(notes) is that all parameter must be produced in construction function.