20天吃pytorch 1-2 图片数据建模流程遇到问题及分析

学习内容:

1-2 图片数据建模流程

如下
1、 datasets.ImageFolder图片数据加载,然后送入Dataloader做一个数据管道
2、 nn.Module基类构建自定义模型
3、 模型训练步骤
4、 模型训练评估


遇到问题与解决方案:

  1. 实例化datasets.ImageFolder类后,为什么可以对其进行遍历,对其遍历的结果为什么是img和label?

因为它继承了DatasetFolder,这个父类中__getitem__方法返回结果是 (sample, target) where target is class_index of the target class.。因此可以直接遍历,对于给定传入的数据,sample是图像数据,target就是它的标签

  1. 把一个[3,32,32]的图像送入模型,产生错误Expected 4-dimensional input for 4-dimensional weight [32, 3, 3, 3], but got 3-dimensional input of size [3, 32, 32] instead

是因为缺少了batch_size这个维度,conv2d中必须要加入batchsize这个维度,才可以正常进行卷积操作。出现这个失误是因为没看清示例代码,忘了把ImageFolder实例化后的数据送到DataLoader中,所以没有batchsize这个维度。解决方法就是把开始处理的数据接着送入DataLoader中即可。

  1. ValueError: Only one class present in y_true. ROC AUC score is not defined in that case.
self.metric_func = lambda y_pred,y_true: roc_auc_score(y_true.data.numpy(), y_pred.data.numpy())

在这里y_true.data的类别只有一个。原因有2点

  1. 在取数据的时候,batchsize=1,模型前向传播得到了一个数,这个标签也是一个数,因此就造成了类别只有1个的现象。解决方法,在Dataloader中增大Batchsize。
  2. 数据分布有问题,数据集排列的很有规律,前面很多数据的标签的标签是1,后边很多数据的标签是0。因此要在Dataloader中进行修改shuffle=True,将数据打乱
    DataLoader(dl_valid,batch_size=batchsize,shuffle=True,num_workers=0)
  3. 修改了batchsize仍然报错,那就再加大batchsize
  4. 还报错,就try…一下,处理异常
  1. 下面的代码有问题
model.optimizer = torch.optim.SGD(model.parameters(),lr = 0.01)
model.loss_func = torch.nn.BCELoss()
model.metric_func = lambda y_pred,y_true: roc_auc_score(y_true.data.numpy(),y_pred.data.numpy())
model.metric_name = "auc"

这几个属性没在模型中定义,应在model所属的类中定义这些属性,而不是实例化后这样定义属性


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值