目录
第1关:神经网络基本概念
20条线
第2关:激活函数
第3关:反向传播算法
第4关:使用pytorch搭建卷积神经网络识别手写数字
卷积神经网络
为什么使用卷积神经网络
卷积神经网络最早主要用来处理图像信息。如果用全连接前馈网络来处理图像时,会存在以下两个问题:
参数太多:如果输入图像大小为100 × 100 × 3。在全连接前馈网络中,第一个隐藏层的每个神经元到输入层都有 30000个相互独立的连接,每个连接都对应一个权重参数。随着隐藏层神经元数量的增多,参数的规模也会急剧增加。这会导致整个神经网络的训练效率会非常低,也很容易出现过拟合。
局部不变性特征: 自然图像中的物体都具有局部不变性特征,比如在尺度缩放、平移、旋转等操作不影响其语义信息。而全连接前馈网络很难提取这些局部不变特征,一般需要进行数据增强来提高性能。
卷积神经网络是一种具有局部连接、 权重共享等特性的深层前馈神经网络。想要识别图像中的物体,就需要提取出比较好的特征,该特征应能很好地描述想要识别的物体。所以物体的特征提取是一项非常重要的工作。而图像中物体的特征以下几种特点:
1.物体的特征可能只占图像中的一小部分。比如下图中狗的鼻子只是图像中很小的一部分。
2.同样的特征可能出现在不同图像中的不同位置,比如下图中狗的鼻子在两幅图中出现的位置不同。
3.缩放图像的大小对物体特征的影响可能不大,比如下图是缩小后的图,但依然能很清楚的辨认出狗的鼻子。
而卷积神经网络中的卷积与池化操作能够较好地抓住物体特征的以上3
种特点。
编程要求
使用pytorch
搭建出卷积神经网络模型,再对模型进行训练,并将训练好的模型保存至./step3/cnn.pkl
中。
测试说明
我们会加载你训练好的模型,并对测试集数据进行预测,预测正确率高于85%
视为过关。
提示:平台使用torch
版本为0.4
,input
需要为Variable
类型,使用代码如下:
#mini_batch
train_loader = Data.DataLoader(dataset=train_data, batch_size=64, shuffle=True)
ps:训练时间较长,需耐心等待!