初始化问题;
if init_weights: # 是否使用初始化权重
self._initialize_weights()
def _initialize_weights(self): # 初始化权重
for m in self.modules():
if isinstance(m, nn.Conv2d):
nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='leaky_relu')
if m.bias is not None:
nn.init.constant_(m.bias, 0)
elif isinstance(m, nn.Linear):
nn.init.normal_(m.weight, 0, 0.01)
nn.init.constant_(m.bias, 0)
elif isinstance(m, nn.BatchNorm2d):
nn.init.constant_(m.weight, 1)
nn.init.constant_(m.bias, 0)
将上述代码改为:
for m in self.modules():#参数初始化操作,遍历模型中的参数
if isinstance(m, nn.Conv2d): #如果模型层是卷积层
nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='leaky_relu')
if m.bias is not None:
nn.init.constant_(m.bias, 0)
elif isinstance(m, nn.Linear):
nn.init.normal_(m.weight, 0, 0.01)
#nn.init.constant_(m.bias, 0)
# 是否为批归一化层
elif isinstance(m, nn.BatchNorm2d):
nn.init.constant_(m.weight, 1)
nn.init.constant_(m.bias, 0)
AttributeError: ‘NoneType‘ object has no attribute ‘fill_‘_excelNo1的博客-CSDN博客
原因:
在Conv2d、Linear 和 BacthNorm2d 中设置了bias = True 才能赋值,否则需要注释bias 的赋值。