背景
提供免费算力支持,有交流群有值班教师答疑的华为昇思训练营进入第二十二天了。
今天是第二十二天,从第十天开始,进入了应用实战阶段,前九天都是基础入门阶段,具体的学习内容可以看链接
基础学习部分
昇思25天学习打卡营第一天|快速入门
昇思25天学习打卡营第二天|张量 Tensor
昇思25天学习打卡营第三天|数据集Dataset
昇思25天学习打卡营第四天|数据变换Transforms
昇思25天学习打卡营第五天|网络构建
昇思25天学习打卡营第六天|函数式自动微分
昇思25天学习打卡营第七天|模型训练
昇思25天学习打卡营第八天|保存与加载
昇思25天学习打卡营第九天|使用静态图加速
应用实践部分
昇思25天学习打卡营第十天|CycleGAN图像风格迁移互换
昇思25天学习打卡营第十一天|DCGAN生成漫画头像
昇思25天学习打卡营第十二天|Diffusion扩散模型
昇思25天学习打卡营第十三天|GAN图像生成
昇思25天学习打卡营第十四天|Pix2Pix实现图像转换
昇思25天学习打卡营第十五天|基于 MindSpore 实现 BERT 对话情绪识别
昇思25天学习打卡营第十六天|基于MindSpore的GPT2文本摘要
昇思25天学习打卡营第十七天|文本解码原理–以MindNLP为例
昇思25天学习打卡营第十八天|基于MindNLP+MusicGen生成自己的个性化音乐
昇思25天学习打卡营第十九天|K近邻算法实现红酒聚类
昇思25天学习打卡营第二十天|基于MobileNetv2的垃圾分类
昇思25天学习打卡营第二十一天|FCN图像语义分割
学习内容
ResNet50迁移学习
在实际应用场景中,由于训练数据集不足,所以很少有人会从头开始训练整个网络。普遍的做法是,在一个非常大的基础数据集上训练得到一个预训练模型,然后使用该模型来初始化网络的权重参数或作为固定特征提取器应用于特定的任务中。本章将使用迁移学习的方法对ImageNet数据集中的狼和狗图像进行分类。
迁移学习详细内容见Stanford University CS231n。
数据准备
下载数据集
下载案例所用到的狗与狼分类数据集,数据集中的图像来自于ImageNet,每个分类有大约120张训练图像与30张验证图像。使用download
接口下载数据集,并将下载后的数据集自动解压到当前目录下。
数据集的目录结构如下:
datasets-Canidae/data/
└── Canidae
├── train
│ ├── dogs
│ └── wolves
└── val
├── dogs
└── wolves
加载数据集
狼狗数据集提取自ImageNet分类数据集,使用mindspore.dataset.ImageFolderDataset
接口来加载数据集,并进行相关图像增强操作。
首先执行过程定义一些输入:
数据集可视化
从mindspore.dataset.ImageFolderDataset
接口中加载的训练数据集返回值为字典,用户可通过 create_dict_iterator
接口创建数据迭代器,使用 next
迭代访问数据集。本章中 batch_size
设为18,所以使用 next
一次可获取18个图像及标签数据。
对获取到的图像及标签数据进行可视化,标题为图像对应的label名称。
训练模型
本章使用ResNet50模型进行训练。搭建好模型框架后,通过将pretrained
参数设置为True来下载ResNet50的预训练模型并将权重参数加载到网络中。
构建Resnet50网络
固定特征进行训练
使用固定特征进行训练的时候,需要冻结除最后一层之外的所有网络层。通过设置 requires_grad == False
冻结参数,以便不在反向传播中计算梯度。
训练和评估
开始训练模型,与没有预训练模型相比,将节约一大半时间,因为此时可以不用计算部分梯度。保存评估精度最高的ckpt文件于当前路径的./BestCheckpoint/resnet50-best-freezing-param.ckpt。
可视化模型预测
使用固定特征得到的best.ckpt文件对对验证集的狼和狗图像数据进行预测。若预测字体为蓝色即为预测正确,若预测字体为红色则预测错误。