Tensorflow笔记:卷积神经网络

前言:

  在全连接网络中,待优化的参数过多,全连接NN:每个神经元都与前后相邻层的每一个神经元相连接,输入为特征值,输出为预测的结果,因此参数个数数量庞大,网络参数的计算公式:

参数个数:\sum \left ( forwardlayer\cdot backwardlayer+b \right )

   例如:对于一张28*28低像素的图片来说,输入节点为784,中间层有500个节点,输出层有10个节点,那么第一层参数为:784*500个w+500个b,第二层参数为500\cdot 10w+10b,一共397510个优化的参数,数量庞大,不利于建模与计算。

 

 

待优化的参数过多会容易造成参数的过拟合。这就需要一个简化参数量的方法,在实际应用中,先对原始图像进行特征提取,将提取到的特征喂给全连接网络。

定义:

卷积就是特征提取的一种方法:

一般用一个正方形的卷积核,保证正方形的中心遍历图片上的每一个像素点,图片区域内,相对应的\small \sum(每一个像素点的像素值)乘以(卷积核内相对应点的权重),求和之后在加上偏置。

 

 

原图5*5的图像,经过卷积核计算为:\small \left ( -1 \right )\cdot 1+0\cdot 0+1\cdot 2+\left ( -1 \right )*5+0\cdot 4+1\cdot 2+\left ( -1 \right )\cdot 3+0\cdot 4+1\cdot 5+1=1

 

 

 输出图片边长=(输入图片边长-卷积核长+1)/步长。在上图中:得到(5-3+1)/1=3

另外为保证原始图片特征的最佳提取,边缘的数据更好的保留,可以在外边一层加入池化层padding,在全零填充中,输出图片的尺寸为:输入图片边长/步长;

在TensorFlow框架中,用参数padding=‘ SAME ’或padding=‘ VALID ’表示。

tf.nn.conv2d(输入描述,eg.[batch,5,5,1] #分辨率5*5,通道数为1

卷积核描述,eg.[3,3,1,16] #行列数:3*3,通道数为1,核个数为16,卷积图片操作之后,输出是16通道

核滑动步长,eg.[1,1,1,1]  #行步长,列步长,固定第一个和第四个参数为1.

padding=' VALID ')

池化(Pooling)

池化用于减少特征数量,简化输入图片。常用的池化方法有:

  • 最大值池化:提取图片纹理
  • 均值池化:保留背景特征

 

在TensorFlow中计算池化:

pool=tf.nn.max_pool(输入描述,eg,[batch,28,28,6]

池化该描述(仅大小),eg.[1,2,2,1]

池化核滑动步长,eg.[1,2,2,1]

padding='SAME')

 舍弃(Dropout)

在神经网络的训练过程中,将一部分神经元按照一定概率从神经网络中暂时舍弃。防止过拟合,这种舍弃仅仅是在训练过程中的舍弃,在使用时被舍弃的神经元恢复链接。

 

 

 在TensorFlow中使用舍弃:

tf.nn.dropout(上层输出,暂时舍弃的概率)

if train: 输出=tf.nn.dropout(上层输出,暂时舍弃的概率)

总结

 卷积神经网络:借助卷积核(kernel)提取特征后,送入全连接网络。

CNN模型的主要模块:

CNN模型的发展历史:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值