ResNet网络介绍
2015年,微软实验室的何恺明提出了ResNet50网络,ResNet50网络的残差网络结构,减弱了传统的卷积神经网络堆叠到一定深度时出现的退化问题。
图(1)
由图(1)可见,传统卷积神经网络在CIFAR-10数据集上,56层网络训练比20层网络训练误差和测试误差更大。
图(2)
由图(2)可见,在CIFAR-10数据集上,ResNet网络层数越深,其训练误差和测试误差越小。
数据集准备与加载
url = "https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/datasets/cifar-10-binary.tar.gz"
download(url, "./datasets-cifar10-bin", kind="tar.gz", replace=True)
使用download接口下载并解压数据
data_set = ds.Cifar10Dataset(dataset_dir=dataset_dir,
usage=usage,
num_samples=10000,
num_parallel_workers=workers,
shuffle=True)
使用Cifar10Dataset接口加载数据集
构建网络
残差网络结构
残差网络结构图如下图所示。主分支通过堆叠一系列的卷积操作得到,shotcuts从输入直接到输出,主分支输出的特征矩阵𝐹(𝑥)F(x)加上shortcuts输出的特征矩阵𝑥x得到𝐹(𝑥)+𝑥F(x)+x,通过Relu激活函数后即为残差网络最后的输出。
构建ResNet50网络
ResNet50网络共有5个卷积结构,一个平均池化层,一个全连接层。
模型训练
先是调用resnet50
构造ResNet50模型,并设置pretrained
参数为True,然后定义优化器和损失函数,逐个epoch打印训练的损失值和评估精度,并且保存评估精度最高的ckpt文件(resnet50-best.ckpt)到当前路径下的BestCheckPoint下。
可视化模型预测
5个epochs下模型在验证数据集的预测准确率在70%左右,如果想要达到理想的训练效果,建议训练80个epochs。