AttributeError: ‘NoneType’ object has no attribute ‘fill_’
前言:在使用pytorch搭建网络的过程中,出现AttributeError: ‘NoneType’ object has no attribute 'fill_'的错误,记录下
一、搭建网络后,开始测试网络输出
model = mobilenet_v1()
input = nn.torch.randn(1,3,224,224)
out = model(input)
print(out.shape)
二、出现以下错误
Traceback (most recent call last):
File "mobilenet_v1.py", line 142, in <module>
model = mobilenet_v1()
File "mobilenet_v1.py", line 96, in __init__
self.init_param()
File "mobilenet_v1.py", line 104, in init_param
nn.init.constant_(m.bias, 0)
File "J:\WorkSoft\envs\yolov5_test\lib\site-packages\torch\nn\init.py", line 186, in constant_
return _no_grad_fill_(tensor, val)
File "J:\WorkSoft\envs\yolov5_test\lib\site-packages\torch\nn\init.py", line 59, in _no_grad_fill_
return tensor.fill_(val)
AttributeError: 'NoneType' object has no attribute 'fill_'
三、在源码中找到出错的地方
model = mobilenet_v1() -> self.init_param() -> nn.init.constant_(m.bias, 0)
对应self.param() 函数如下
def init_param(self):
for m in self.modules():
if isinstance(m, nn.Conv2d):
nn.init.kaiming_normal_(m.weight)
nn.init.constant_(m.bias,0)
elif isinstance(m, nn.Linear) or isinstance(m, nn.BatchNorm2d):
nn.init.constant_(m.weight,1)
nn.init.constant_(m.bias, 0)
在Conv2d、Linear 和 BacthNorm2d 中设置了bias = True 才能赋值,否则需要注释bias 的赋值。