深度学习如何建立一个训练数据集?

Pytorch中的torchvision包中有一个名为ImageFolder的类,它能很好地为我们完成一切,只要我们的图像在一个适合的目录结构中,其中每一个目录分别是一个标签(例如,所有猫都在一个名为cat的目录中)。对于我们在对猫狗进行分类时,我们只需要以下代码:

import torchvision
from torchvision import transforms
train_data_path='"./train/"
transforms=transforms.Compose([
    transforms.Resize(64),
    transforms.ToTensor(),
    transforms.Normalize(mean=[***],
                                       std=[***])
train_data=torchvision.datasets.ImageFolder
(root=train_data_path,transform=transforms)
])

这里来分析一下以上代码的运算过程:
torchvision允许指定一个转换列表,将图像输入到神经网络之前可以应用这些变换。默认转换是将图像数据转换为一个张量(前面代码中的transforms.ToTensor()方法),另外还可以做一些可能看起来不太明显的工作。
首先,GPU非常擅长完成标准大小的计算。当然,我们也可能有各式各样的图像,往往有不同的分辨率。为了提高处理性能,我们通过Resize(64)转换把得到的每个图像缩放为相同的分辨率64x64。然后将图像转换为一个张量,最后根据一组特定的均值和标准差对张量归一化。
归一化很重要,因为输入通过神经网络层时会完成大量乘法;保证到来的值在0~1之间可以防止训练阶段中值变得过大[这称为梯度爆炸(exploding gradient)问题]。这里使用的时神奇参数是整个ImageNet的均值和标准差。可以专门计算这个鱼和猫子集的均值和标准差,不过ImageNet数据集这些值已经足够了(如果你要处理一个完全不同的数据集,就必须计算均值和标准差,不过很多人都是直接使用这些ImageNet常量,这样报告的结果也是可以接受的)
利用这些可组合的转换,我们可以很容易地完成图像的旋转和倾斜等操作来实现数据增强。
这里我们将图像分辨率调整为64x64.可选择的尺寸是多样的,常见的也有224x224或299x299的图像分辨率。一般来讲,输入尺寸越大,网络学习的数据就越多。但通常GPU内存中只能容纳很小批量的图像。
:文章摘选自《基于Pytorch的深度学习》Ian Pointer著

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毛毛真nice

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值