Hello,又是一个分享的日子,上期博主介绍了巨人肩膀上的迁移学习----图像分类,并介绍了图像在进入神经网络前的预处理工作。今天博主给大家分享的是利用迁移学习对图像数据回归,不可避免的,这也同样需要对图像数据进行预处理,因此还没有熟悉图像预处理的可以花上几分钟看一看博主的上一期推文。

当然啦,说到图像分类,就离不开CNN卷积神经网络,这一期我们采用的VGG16迁移学习模型就是由CNN网络加全连接层组成的。博主也在往期的推文中也介绍了CNN卷积神经网络的原理,还不熟悉CNN卷积神经网络原理的小伙伴可以翻一下:什么?卷积层会变胖?人工智能之光---CNN卷积神经网络(原理篇),这里博主就不进行过多的赘述了。

回归

回归任务

这里先讲下我们这次迁移学习的回归任务:我们这期还是采用与前两期相同的图像数据集fashion minist,这个数据集是衣服图像数据集合,有10个标签,这里我们需要给这10类衣服假设他们对应的价格,然后对其进行回归预测。

那么如何假设他们的价格呢?这里我们通过正态分布去给每一类衣服标上他们的价格。

正态分布的两个最重要的指标是均值和标准差,它决定了整个正态分布的位置和形状。我们这里简单利用它的性质,提前设定好我们每一类衣服的价格(即均值), 然后设定一个标准差,通过正态分布去随机生成价格赋予给对应类的衣服。下面,我们上个图让大家有更加直观的感受。

上图的μ就是均值也就是我们提前设定的衣服价格,σ就是我们设定的标准差,通过两者描绘出了正态分布的图像,然后我们通过它随机产生一个价格赋予该类衣服即可。

如上图可见,在99%的情况下,价格都在均值μ±2.58σ处振荡,因此我们得到的衣服价格不会太过偏离我们之前的设定的均值(价格),既保证了我们该类衣服价格设定的随机性,同时也保证了价格范围的合理性。

  • 伪造回归数据规则

总共有10类衣服,他们每一类的价格设置规则如下:

  • 回归原理

在往期的推文中,博主也利用过BP神经网络做回归任务,如果想更加深入了解的小伙伴也可以去翻阅一下BP神经网络回归---房价预测。下面,我们简单介绍下回归的原理:

回归是确定两种或两种以上的变量间相互依赖的定量关系的方法。映射到本文就是用我们图像数据去预测该图像上衣服的价格。说直白点,就是通过X与Y确立函数关系式,只不过X换成了图片罢了。

迁移学习

原理

迁移学习讲诉了一个站在巨人肩膀的故事。随着越来越多的深度学习应用场景的出现,人们不可避免会去想,如何利用已训练的模型去完成相类似的任务,毕竟重新训练一个优秀的模型需要耗费大量的时间和算力, 而在前人的模型上修修补补,举一反三无疑是最好的办法。

我们这一期将选择VGG16这个模型来做迁移学习,如下图。我们可以看到VGG16最多的网络层是CNN网络,所以,我们不用把问题想得太过于复杂,这其实就是一个CNN卷积神经网络模型,只是我们借用了别人已经训练好的模型来完成我们的任务罢了。

那对于这个模型,我们应该如何去利用它来完成我们的任务呢?由于我们这期采用的数据集和上期推文一样,只是我们这次做的是回归,但总体流程并没有变多少, 也是将VGG16的输出层(全连接层)拆掉,换成我们想要的输出层(回归的输出层)即可,其余层保持不变,将图像数据导入模型中训练就可以了。

图像预处理

数据集

这一期,我们同样是基于fashion MNIST数据的图像分类去做实验。在2017年8月份,德国研究机构Zalando Research在GitHub上推出了一个全新的数据集,其中训练集包含60000个样例,测试集包含10000个样例,分为10类,每一类的样本训练样本数量和测试样本数量相同。样本都来自日常穿着的衣裤鞋包,每个都是28×28的灰度图像,其中总共有10类标签,每张图像都有各自的标签。

值得注意的是,因为VGG16只能识别尺寸大于48×48彩色图片,而我们的数据集是28×28灰色图片,因此我们在将数据集灌入迁移学习模型前,要对图片数据集进行适当地转换,也就是比上一期传统CNN神经网络的图像预处理多了一步:将图片转换成48×48大小的彩色图片。

对于图像生成器ImageDataGenerator,博主上一期已进行了简单的介绍,主要是让大家知道这么个东西。等到大家需要用的时候,去翻阅官网查询即可。博主每次用的时候也是要翻阅的,因为参数比较多,不可能都记住的。这里只附上它的链接,就不进行过多的赘述了。

Keras图像生成器参数含义

https://keras.io/zh/preprocessing/image/

上述的图像预处理操作均会在后面的代码有所体现。

实验

实验环境

  • Anaconda Python 3.7

  • Jupyter Notebook

  • Keras

    开发环境安装在之前的推文中已经介绍,还没安装的小伙伴可以翻一下。

  • Python开发环境---Windows与服务器篇

  • Python深度学习开发环境---Keras

  • 图像数据集

提取码:ffbp

https://pan.baidu.com/s/1D4EKsd3GpWXcjRnmJtFGXw

实验流程

  • 加载图像数据

  • 图像数据预处理

  • 通过正态分布对每张图像里的衣服赋予价格

  • 对每张图像的价格进行归一化(去掉量纲,使数据具有可比性)

  • 训练模型

  • 保存模型与模型可视化

  • 训练过程可视化

  • 模型的预测功能

代码

  • 核心代码

# 使用VGG16模型
base_model = applications.VGG16(include_top=False, weights='imagenet', input_shape=x_train.shape[1:])  # 第一层需要指出图像的大小 # # path to the model weights files.
# top_model_weights_path = 'bottleneck_fc_model.h5'
print(x_train.shape[1:])
model = Sequential()
print(base_model.output)
model.add(Flatten(input_shape=base_model.output_shape[1:]))
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('linear'))   # add the model on top of the convolutional base
model = Model(inputs=base_model.input, outputs=model(base_model.output))  # VGG16模型与自己构建的模型合并    # 保持VGG16的前15层权值不变,即在训练过程中不训练
for layer in model.layers[:15]: layer.trainable = False    # initiate RMSprop optimizer
opt = keras.optimizers.rmsprop(lr=0.0001, decay=1e-6)    # Let's train the model using RMSprop
model.compile(loss='mse',  # 均方误差    optimizer=opt, )

正如前面所说,上述代码就是拆掉了输出层,并在VGG16中换成了我们想要的回归输出层,并保持训练过程中VGG16模型前15层的权值不变,我们就能得到我们想要的训练模型了,其余的和上一期迁移学习模型并没有太大区别,唯一不一样的是这里用的loss函数是mse(均方误差)

其中, fi是模型预测值,yi是实际值,通过计算两者的均方误差来衡量模型的有效性。

  • 参数

    Dense: 全连接层。

    CNN2D:2维卷积神经网络,常用于处理图像。

    Dropout: 以一定概率放弃两层之间的一些神经元链接,防止过拟合,可以加在网络层与层之间。

    optimizer: 优化器,梯度下降的优化方法

    这些都在之前的推文中有所介绍,小伙伴们可以去翻阅一下。

    码前须知---TensorFlow超参数的设置

    activation: 激励函数,‘linear’一般用在回归任务的输出层,而‘softmax’一般用在分类任务的输出层

        

        validation_split 切分一定比例的训练集作为验证集

  • epochs 与 batch_size:前者是迭代次数,后者是用来更新梯度的批数据的大小,iteration = epochs / batch_size, 也就是完成一个epoch需要跑多少个batch。这这两个参数可以用控制变量法来调参,控制一个参数,调另外一个,看损失曲线的变化。

    小伙伴们可以去keras官网查看更多的参数含义与用途,博主也会在后续的课程中通过实验的方法将这些参数涉及进来,让大家的知识点串联起来。

Keras官网

https://keras.io/

  • Git链接

代码

https://github.com/ChileWang0228/DeepLearningTutorial/blob/master/Transfer_learning/Trasnfer_learning_cnn_regression.ipynb

训练结果

  • 训练过程

  • 结果分析

    我们这里只是跑了5个epoch,均方误差已经缩小至0.01,说明误差已经非常之小了,因此我们得到的模型是比较优秀的模型,也就是说,我们借用迁移学习的力量出色地完成了回归任务。

代码实践视频

视频卡顿?bilibili值得拥有~(っ•̀ω•́)っ✎⁾⁾ 我爱学习

https://www.bilibili.com/video/av60845141/

总结

好了,到这里,我们就已经将迁移学习---图像回归的知识点讲完了。大家在掌握了整个流程之后,就可以在博主的代码上修修补补,训练自己的迁移学习模型来做图像回归任务了。

下一期,博主给大家介绍自编码器的原理,敬请期待吧~

如果本期推文有用,那就点个赞吧,你们的点赞是博主持续更新的动力,感谢每一位小伙伴的关注~

图片来源于网络,侵删

留言

博主刚弄的一个留言功能,欢迎各位小伙伴踊跃留言~

巨人肩膀上的迁移学习(2)---图像回归相关推荐

  1. TensorFlow练手项目三:使用VGG19迁移学习实现图像风格迁移

    使用VGG19迁移学习实现图像风格迁移 2020.3.15 更新: 使用Python 3.7 + TensorFlow 2.0的实现: 有趣的深度学习--使用TensorFlow 2.0实现图片神经风 ...

  2. 大作业论文之基于迁移学习的图像预测研究

    基于迁移学习的图像预测研究 摘  要:深度学习技术发展迅速,在图像处理领域取得了显著成果.[2]但是由于部分图像样本少,标注困难,使得深度学习的效果远未达到预期.迁移学习是机器学习中一种新的学习范式, ...

  3. 计算机视觉3.3 :迁移学习之图像特征向量提取与运用

    迁移学习之图像特征向量提取与运用 ​ 本篇文章将要讨论的是关于计算机视觉中迁移学习的概念,一种能够利用预先训练好的模型,从它之前训练的数据集之外的数据集进行学习的能力. ​ 举个例子来说: ​ 现有A ...

  4. 站在巨人肩膀上的牛顿:Kubernetes和SAP Kyma

    这周Jerry在SAP上海研究院参加了一个为期4天的Kubernetes培训,度过了忙碌而又充实的4天.Jason,Benny和Peng三位大神的培训干货满满,借此机会,Jerry和过去的两位老领导P ...

  5. 站在巨人肩膀上优雅地分蛋糕

    作者:不多爸初稿.巨人姐修订 编辑:PRS布道者 普通人并非不懂保护图片版权 我是一名软件开发工程师,和很多人一样,开了一个微信订阅号「不多不多」记录一下自己的思考与生活,目前已经发布 60 多篇文章 ...

  6. 站在巨人肩膀上的意思就是拒绝重复造轮子,分享12个常见的js插件

    1.copy-to-clipboard (剪贴板) github/zenorocha/clipboard.js 2.FileSaver (文件另存为) github/eligrey/FileSaver ...

  7. 站在巨人肩膀上创新?怕是站在巨人肩膀上“打包”吧

    8月15日,一则自主研发浏览器核心产品的"红芯"公司宣布完成2.5亿C轮系列融资的资讯突然在网上大量出现.称通过研发出具有我国自主知识产权的浏览器核心技术,该公司推出世界第五颗也是 ...

  8. 带着红领巾,站在巨人肩膀上登鼻上脸,文化或浮躁?

    一.红芯事件 事件描述:8月15日,完成2.5亿c轮融资的"自主研发"红芯浏览器,被爆虚假宣传,实为基于Chrome内核修改而来. 二.我的评论 三.我认同的观点 以下从我国历史文 ...

  9. 站在一哥们巨人肩膀上,开发完善了闲鱼上新监测软件

  10. 【转】NLP的巨人肩膀(上)

    我们都知道,牛顿说过一句名言 If I have seen further, it is by standing on the shoulders of giants. 无可否认,牛顿取得了无与匹敌的 ...

最新文章

  1. 快排递归非递归python_Python递归神经网络终极指南
  2. 达摩院年终预测重磅出炉:AI for Science 高居榜首,2022 十大科技趋势!
  3. php csv,php csv操作类代码
  4. themeleaf跳转锚链接
  5. 语音识别(四)——DTW, Spectrogram, Cepstrum Analysis
  6. 第九篇:Spring Boot整合Spring Data JPA_入门试炼03
  7. Docker安装与卸载,配置阿里云镜像加速器
  8. 性能测试概念点分析与过程讲解(一)
  9. Qt——P25 QListWidget控件
  10. 【渝粤教育】国家开放大学2018年春季 0007-21T文书档案管理 参考试题
  11. 【实战】Axis2后台Getshell
  12. VIVE Input Utility
  13. 190122每日一句
  14. Ajax无刷新评论的PHP代码,PHP Ajax实现页面无刷新发表评论
  15. 毕业论文自动去重软件,内附软件
  16. python生成器详解
  17. 绕过CDN查找网站真实IP
  18. 连接数据线截图/截视频
  19. 双稳态电路的两个稳定状态是什么_干货 | 常见的脉冲电路到底有何用途和特点?终于了解了!...
  20. Android进程间通信系列-----------进程间的数据传递载体Parcel

热门文章

  1. Win12爆料,微软Windows 12计划3月份开始开发
  2. android发现u盘自动安装apk,安卓自动识别U盘中APK文件并进行安装操作
  3. ArcGIS中用数据生成线和面的方法
  4. MDK与keilC51共存的方法
  5. 坐标系的旋转与欧拉角
  6. EXCEL:如何设置某一列不能修改
  7. 【知识点总结】电路原理 第一讲
  8. 谈谈OSI模型和它的数据传输
  9. 【转载】国医大师熊继柏:用中医思维彻底把新冠病毒中医治疗方案说清楚!值得中医人收藏
  10. 分享10个优秀的技术栈社区