基于ResNet 18实现的MNIST数字多分类(pytorch 框架)

基于ResNet 18实现的MNIST数字多分类(pytorch 框架)

下文将进行对于原理的介绍,若已了解原理可直接到文末 免费获取完整代码

一、原理介绍

MNIST是一个非常有名的手写数字识别数据集,在很多资料中,这个数据集都会被用作深度学习的入门案例。

MNIST数据集是NIST数据集的一个子集,它包含了60000张图片作为训练数据,10000张图片作为测试数据。在MNIST数据集中的每一张图片都代表了0~9中的一个数字。图片的大小都为28x28,且数字都会出现在图片的正中间,这些都是灰阶图像所以是一层三维的数据

首先我们来看一下有十个分类的情况下那他们的输出如何:这10个概率的输出应该是总和=1且均>0的。但某些情况下,可能会出现P(y=1)=0.8,P(y=2)=0.9 这样的情况,所以当 求出P(y=1)=0.8后需要对后面的概率情况进行抑制。

神经网络计算出来的结果可能是小于0的,可能总和不为1,在多分类问题的背景下,loss函数使用一个更加复杂的函数,叫交叉熵。sigmoid函数可以将任何一个值转化到0~1之间,对于一个二分类问题,这样就足够了,如果不属于第一类,那么必定属于第二类,所以只需要用一个值来表示其属于其中一类概率,但是对于多分类问题,需要知道其属于每一类的概率,这个时候需要softmax函数。softmax的公式如下:

其中,z_l是线性层最后一层的输出,e^zi作用为强制使其>0,分母的作用为保证概率求Σ之后为1,这样就实现了功能需求。softmax作用的示意图如下图所示。

    

接下来我们将进行多分类问题中损失函数的求解。

pytorch提供了现成的交叉熵损失函数框架,该框架包含了从softmax开始一直到输出的全过程,所以输入的时候只需要将神经网络计算的原始结果输入到框架中就行了,不需要做激活。

深度残差网络(Deep residual network, ResNet的提出是CNN图像史上的一件里程碑事件。对于一个堆积层结构(几层堆积而成)。对于一个堆积层结构(几层堆积而成)当输入为 x时其学习到的特征记为F(x), 现在再加一条分支,直接跳到堆积层的输出,则此时最终输出H(x) = F(x) + x

18层的网络有五个部分组成,从conv2开始,每层都有两个有残差块,并且每个残差块具有2个卷积层。

其中,蓝色部分为conv2,然后往下依次按颜色划分为conv3、conv4,conv5。需要注意的是,从conv3开始,第一个残差块的第一个卷积层的stride为2,这是每层图片尺寸变化的原因。另外,stride为2的时候,每层的维度也就是channel也发生了变化,这这时候,残差与输出不是直接相连的,因为维度不匹配,需要进行升维,也就是上图中虚线连接的残差块,实线部分代表可以直接相加。

二、代码实现效果

最后实现了基于ResNet 18实现的MNIST数字多分类(pytorch 框架)的代码实现,代码实现效果如下:

三、免费代码获取

添加公众号后,查看对应的往期文章,免费获取完整源码以及数据集

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
要使用PyTorchMNIST手写数字图像进行分类,你可以按照以下步骤进行操作: 1. 首先,使用PyTorch定义ResNet50网络模型。ResNet50是一种深度卷积神经网络,适用于图像分类任务。 2. 接下来,使用PyTorch加载MNIST数据集。PyTorch提供了方便的数据加载工具,你可以使用torchvision.datasets.MNIST函数加载MNIST数据集。如果是第一次运行代码,PyTorch会自动下载数据集。 3. 在加载数据集之后,你可以对数据进行一些预处理操作。例如,可以使用torchvision.transforms.Compose函数将多个转换操作组合在一起,比如将图像转换为Tensor,并进行标准化。 4. 接着,你可以创建训练数据加载器和测试数据加载器。可以使用torch.utils.data.DataLoader函数来创建数据加载器。训练数据加载器用于训练模型,测试数据加载器用于评估模型的性能。你可以指定批量大小、是否打乱数据等参数。 5. 然后,你可以使用定义好的网络模型、数据加载器和损失函数,进行训练过程。训练过程中,可以使用优化器(如SGD或Adam)来更新模型的参数,并计算损失值。训练过程中可以显示损失值的变化情况。 总结起来,对于MNIST手写数字图像分类PyTorch代码,你需要定义ResNet50网络模型,加载MNIST数据集,进行数据预处理,创建训练和测试数据加载器,并进行训练过程。 请注意,上述步骤只是一个大致的框架,具体的代码实现可能会有所不同。你可以根据自己的需求和实际情况对代码进行调整和修改。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Resnet50卷积神经网络训练MNIST手写数字图像分类 Pytorch训练代码](https://download.csdn.net/download/baidu_36499789/87418795)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [用PyTorch实现MNIST手写数字识别(非常详细)](https://blog.csdn.net/sxf1061700625/article/details/105870851)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

qq_53393298

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

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

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

打赏作者

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

抵扣说明:

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

余额充值