搭建识别食物模型时出现的错误

一、搭建第一级特征提取网络

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种类别概率相同,验证过程:loss=-log\frac{e^{\frac{1}{101}}}{101*e^{\frac{1}{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。

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))

 

 

 

 

 

持续更新中......

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值