深度学习-----从零开始实现识别手写字体任务(四)卷积层与池化层

一.卷积层的作用

在我们识别一个简单图像的时候,会根据图像的特征来确定图像表示的意义。所有第一步我们就是要提取目标的特征,而这一任务就是由卷积层完成的。

二.定义二维卷积函数

二维卷积的原理如图

在这里插入图片描述

二维卷积的原理可以理解为图像与特征图像权重求和的过程,数值越大,图像越具有此特征。

def conv2d(x, W):
    return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')

strides=[1, 1, 1, 1]:卷积核在各个维度的移动步长都为一。

padding主要有两个值

  1. SAME:可以不丢弃任何像素点(在矩阵边缘加一圈0)
  2. VALID:丢弃边缘像素点

在这里SAME的作用为:使图像在经过卷积后维度不变

三.定义池化函数

def max_pool_2x2(x):
    return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')

采用最大池化,也就是取窗口中的最大值作为结果
x 是一个4维张量,shape为[batch,height,width,channels]
ksize表示pool窗口大小为2x2,也就是高2,宽2
strides,表示在height和width维度上的步长都为2

经过池化后可以使图像的维度降低

四.定义卷积层

卷积层1:

W_conv1 = weight_variable([5, 5, 1, 32])  
b_conv1 = bias_variable([32])
# 偏置项,参与conv2d中的加法,维度会自动扩展到28x28x32(广播)
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)  
# output size 28x28x32
h_pool1 = max_pool_2x2(h_conv1)  
# output size 14x14x32 卷积操作使用padding保持维度不变,只靠pool降维

初始化W_conv1为[5,5,1,32]的张量,表示卷积核大小为5*5,1表示图像通道数(输入),32表示卷积核个数即输出32个特征图(即下一层的输入通道数)

一开始输入一个28*28*1的矩阵,经过W_conv1,b_conv1,h_conv1后变为28*28*32的矩阵,使图像变为32个28*28的特征图。之后经过池化层变为32个14*14的特征矩阵图。

卷积层2:

W_conv2 = weight_variable([5, 5, 32, 64])  # 同conv1,不过卷积核数增为64
b_conv2 = bias_variable([64])
h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2) 
# output size 14x14x64
h_pool2 = max_pool_2x2(h_conv2)  
# output size 7x7x64

卷积层2与卷积层1原理相同,不过将卷积核增加为64,每个输入经过池化层之后变为64个7*7的特征图 。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值