基于 PyTorch 的Cifar图像分类器原理及实验分析

基于 PyTorch 的图像分类器的设计与实现

一、Cifar数据集的定义

Ciafar是一类用于普世物体识别用的数据集,与Mnist数据不同,Mnist数据只有0-9(10种)的手写体,但大体上都是数字而且均为黑白。Cifar里面有60000张彩色图片,由的十种数据为('plane', 'car', 'bird', 'cat','deer', 'dog', 'frog', 'horse', 'ship', 'truck')这几种属于完全不同的种类构成,每张图片为32*32的图片,6万张图片又分为五万张训练集以及一万张测试集。

二、分类问题的定义及对求解问题建模

我们在对Cifar数据进行分类时,一共使用了三种分类方法,线性分类,全连接分类,以及卷积网络分类。由于Cifar数据集是彩色图片,因此在使用时考虑到3通道,我们将每张图片变换为3*32*32的tensor,在经过不同的神经网络层的映射之后,最后都会把它映射为一个维度为10的Tensor,对这个数据使用softmax函数映射为不同的类别,一般我们在使用交叉熵损失函数的时候,就已经内置了softmax,来进行最终的分类判别,不同的类别对应的class值,我们在对不同的模型训练之后,对一万的测试集进行测试。由于Cifar数据集涉及的种类较多,并且属于三通道图像,因此在刚开始训练时正确率都较低,需要不断的优化网络结构体,调整超参数来进一步提高正确率,目前来看线性回归分类器<全连接分类器<卷积神经网络分类器

三、三种分类器的设计细节

3.1线性回归分类器40%

线性回归分类器只是用一层神经网络的模型,在本次实验中,我们加载的Cifar数据为三通道,分辨率为32*32大小的图片,因此,对于只有一层网络的线性回归器,我们只需要考虑,超参数中,batch­_size的选择为100,学习率设置为0.001。

关于batch_size,它决定了分批处理数据时,每批数据包含多少图片,batch_size如果太小,会导致经过多次循环仍然不收敛的情况,随着batch_size的增大,处理数据的速度也会变快,但是当batch_size过大时,达到相同的精度就会需要越来越多的epoch,因此要选择合适的Batch_size,根据吴恩达的课程推荐2的幂次,因此实验128和64两种。比较收敛速度和精度。

学习率决定了训练后,梯度每次修改的大小,虽然学习率越小收敛的越精确,但是收敛速度很慢。一般都设置为0.001。

输入的size为3*32*32=3072,而输出的size为10,其中不包含其他隐藏层,关于损失函数,我们使用交叉熵损失,在交叉熵损失中就已经自动包含了softmax函数,该函数多用于多分类问题的激活函数,优化器使用SDG梯度下降优化,经过以上步骤,线性回归分类器模型初始化就做好了。接下来就要训练加载的数据了。

数据通过自带的函数会对数据进行下载,通过data_lodaer对数据进行加载,这里的训练数据要进行打乱。在训练的过程中,我们使用epoch=50(ps毕竟只有一层Linear,50次有点多,其实早早收敛了,但是在运行全连接的分类器时发现前十层只有20%的正确率让我有点怀疑人生,因此能多训练就多训练)。

最后的结果还是大概收敛在40%的正确率附近,已经不错了。由下图可知,在第23次训练时结果最好loss=1.5548(batch_size=128)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值