简明详细阐述CNN深度神经网络实现步骤及关键点

1.读取图片

生成样本列表和标签列表,可以根据路径或者文件名获取每个样本的标签项

2.划分测试集和训练集

在tensorflow中可以先使用tf.data.dataset.from_tensor_slices函数将数据转化成dataset类型;对于训练集可以使用shuffle函数对数据进行乱序(乱序的作用是使每个epoch中的样本数据顺序不同,防止网络记录样本间的次序信息),然后设置batch_size大小,batch_size大小就是小批量梯度下降中的样本量大小,就是训练多少样本进行计算一次梯度,对于测试样本这是一个batch_size大小,设置batch_size 本质上就是对样本进行分组,会增加数据的一个维度

3.预处理

若在tensorflow里,我们可以

  1. 先使用tf.io.read_file 函数以细节流字符串的形式读取图片数据,
  2. 使用image.decode_jpeg 函数将字节流字符串解析成图片
  3. 使用image.resize方法将图片统一尺寸
  4. 使用tensorflow tf.image下的方法将图片进行一些随机对比度,随机裁剪,随机亮度,随机反转的操作来增加样本量,进而增加样本数量
  5. 使用tf.cast方法对图片张量中的数据转换为float32 类型,然后使用除法进行归一化操作,一般将数据除以255

5.构建模型

卷积->池化->批标准化->激活函数(relu)->
… (重复)
卷积->池化->批标准化->激活函数(relu)->
全局平均池化->
全连接层->批标准化->激活函数(relu)->
…(重复)
全连接层->批标准化->激活函数(sigmoid或softmax)

注意:

  1. 卷积核数量一般设置为2的n次方并且越来越大,,卷积核大小参考VGG16设置为3*3
  2. 对于有的多层 feature map 的网络,先对每个feature map 进行卷积 然后将每层卷积结果相加
  3. 池化层主要的作用 保留显著特征、降低特征维度,简化网络复杂度、减小计算量、增大kernel的视野
  4. 模型中的卷积层(CNN)的主要作用是进行体征提取,全连接层用来进行分类(本质上就是一个分类器)
  5. 全连接就是个矩阵乘法,相当于一个特征空间变换,可以把前面所有有用的信息提取整合。再加上激活函数的非线性映射,多层全连接层理论上可以模拟任何非线性变换。但缺点也很明显: 无法保持空间结构。
  6. GAP 的作用是将每一个feature map降维成一个数据值,在使用GAP后,网络收敛速度将会变慢。

下边展示一下 VGG 的网络结构图:
在这里插入图片描述

6.训练网络

  1. 每次选取一个batch数量的样本放到网络里进行训练,然后计算每个节点的平均梯度,然后根据学习率在梯度反方向上更新参数值(权重或偏置)
  2. 当每个epoch结束之后,计算(测试集或者训练集)当前epoch下的平均损失或是平均准确率
  3. 逻辑回归(通过sigmoid逻辑激活函数激活的网络)一般使用交叉熵损失函数,损失函数根据二分类或多分类分别用BinaryCrossentropy()(二元交叉熵)和CategoricalAccuracy()(多元交叉熵) 同时根据标签项是否是one-hot编码,损失函数也有不同。详细了解交叉熵请参考此博文->#本质上理解# 熵、交叉熵、KL散度的关系
  4. 线性回归 使用最小二乘最为损失函数,因为激活函数的目的就是实现非线性,因此线性回归一般不使用激活函数
  5. 优化函数一般有 随机梯度下降 小批量梯度下降,批量梯度下降。这种划分batch的方式是小批量梯度下降

7.多输出的CNN模型

多输出的CNN模型表示并非指模型的最后一层有多个输出,而是指在CNN的特征提取器(所有卷积层)后连接多个分类器,每个分类器拥有不同的功能(目标定位,分类等)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

energy_百分百

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值