一、搭建第一级特征提取网络
1 RuntimeError: Expected object of scalar type Long but got scalar type Float
原因:自己写的vgg16网络维度计算错误。
解决方法:修改全连接层的神经原个数。
2 MSELoss损失函数的输入值计算错误。
原因:[32,1]与[32]不同、需要Float类型、MSELoss用于分类。
解决方法:逐个击破。
3 PermissionError: [Errno 13] Permission denied:
原因:f=open(f,'rb')出错,权限问题。
解决方法:修改访问文件夹的根文件夹的访问权限。
4 第一级特征网络损失函数总是维持在4.614~4.615之间。
原因:经过查阅资料得知可能是网络不收敛,101种类别概率相同,验证过程: =4.615,果然
解决办法:
将batch_size=64改为batch_size=32
5 第一级特征网络的损失函数前几轮损失值很小,慢慢的变大。
原因:使用Adam优化器时设置weight_decay=0.1所致。
解决办法:设置weight_decay=0
注意:我使用的是resnet50,全连接层改为101个输出神经元,全连接层权重的初始值对训练也很重要。
使用如下赋值时,损失值下降很快。
nn.init.kaiming_normal_(m.weight, a=0, mode='fan_out')
nn.init.constant_(m.bias, 0.0)
使用如下赋值时损失值下降很慢,甚至损失函数达不到很小值。
m.weight.data.normal_(0, 0.01)
m.bias.data.zero_()
6 保存注意力图片后,读取出来的图片是全黑色的。
原因:
1 cv2.rectangle()函数返回值的类型不明确。
2 cv2类型的图像格式为bgr,PIL.Image类型的图像为rgb格式,格式不同需要转换。
解决办法:
1 未解决。
但是使用如下代码结果正确:
img=Image.open('food1.jpg')
i=np.asarray(img)
cv2.retangle()中参数img和返回值类型都为ndarray。
2
cv2.imread()可以读取rgb或bgr格式的图片,而plt.imshow()只能读取rgb格式的图片。
cv2.imwrite()可以写入rgb或bgr格式的数据。
#保存为rgb格式的图像
img=Image.open(path)
cv2.imwrite(osp.join(path,cv2.cvtColor(img,cv2.COLOR_RGB2BGR))
持续更新中......