吴恩达深度学习编程作业0402——ResNets

前言
本次练习旨在通过使用残差网络帮助我们训练一个深层的卷积网络,在过去深层的网络意味着复杂的函数,很难去实践。残差网络帮助我们让实践变得可行。
具体操作:
1.构建残差网络的块
2.将块连接到一起去训练一个用于图片分类的残差网络
(使用Keras实现)

加载包报错1:

ImportError: cannot import name 'plot_model' from 'keras.utils'

过去已经出现过此问题,是版本更新引起的,修改表达方式如下:

from keras.utils.vis_utils import plot_model

解决!

构建残差网络
1.标识块
标识块原理图1
标识块原理图2
作业中使用了如上两种结构的标识块,第一种通过快捷方式连接跨越了两层,第二种直接跨越三层。
2.标识块构成细节:
1.构建“主路”:分三步 参考指南
实施BatchNorm 参考指南
2.最后步骤:快捷链接 参考指南;使用激活函数
报错:

AttributeError: module 'tensorflow' has no attribute 'reset_default_graph'

解决方法:
错误产生是源于tensorflow版本更新
引用语句改为:

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

再次编译成功!
3.卷积块
卷积块结构
注:即便输入输出的维度不同也可以使用卷积块;卷积块与标识块的不同之处在于快捷链接部分包含Conv2D层
Conv2D层的用处在于使用线性函数将输入x转化为不同的尺寸

卷积块构成细节:
1.构建“主路”:分三步
2.建立快捷方式:与之前的不同在于添加了Conv2D层
3.最后步骤:将快捷方式与主路连接;应用激活函数
4.构建你的一个残差网络模型
模型结构
注:图中“ID BLOCK x3”表示你需要堆叠标识块3次
构建好模型后就可以开始训练模型了,练习中初始设置的epochs=2,这样训练后精确度并不高。作者给出的解释是,在训练20轮后可以获得不错的精确度,但是在CPU上训练模型会花费很长时间。若果使用GPU进行训练,时间会大幅度缩短。
5.测试自己的图片
报错:

AttributeError: module 'scipy.misc' has no attribute 'imread'

报错原因:新版本的scipy舍弃了一些函数,其中就包括 imread。
解决方法:
1.降低scipy的版本
2.修改引用方式和使用方式如下:
原引用方式:

import scipy.misc

原使用方式:

my_image = scipy.misc.imread(img_path)
修改后:
import imageio
my_image = imageio.imread(img_path)

总结:由于梯度消失问题,很深的传统卷积网络实践中很难实现,残差网络的出现解决了这一问题,只需简单的堆叠标识块和卷积块就能实现很深的网络,获得较好的性能。在完成作业的过程中可能会出现得出的数据和示例不一致的情况,作者也给出了适当的范围值,只要在范围内就可以接受。

希望能够帮助你解决和我一样的问题。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值