卷积神经网络的相关函数


声明:以下内容绝大多部分来自于《深度学习之TensorFlow:入门、原理与进阶实战》,本博客只是为了更好学习,而将书本内容打一遍。


前言

在TensorFlow中,使用tf.nn.conv2d来实现卷积操作,使用tf.nn.max_pool进行最大池化操作。通过传入不同的参数,来实现各种不同类型的卷积与池化操作。

卷积函数tf.nn.conv2d

TensorFlow里使用tf.nn.conv2d函数来实现卷积,其定义如下。

tf.nn.conv2d(input,filter,strides,padding,use_cudnn_on_gpu=True,name=None)

除去参数name参数用以指定该操作的name, 与方法有关的共有5个参数。
·input:指需要做卷积的输入图像,它要求是一个Tensor,具有[batch,in_height,in_width, in_channels]这样的形状(shape),具体含义是“训练时一个batch的图片数量,图片高度,图 片宽度,图像通道数”,注意这是一个四维的 Tensor,要求类型为float32和float64其中之一。
·filter:相当于CNN中的卷积核,它要求是一个Tensor,具有[filter_height,filter_width, in_channels,out_channels]这样的shape,具体含义 是“卷积核的高度,滤波器的宽度,图像通道 数,滤波器个数”,要求类型与参数input相同。 有一个地方需要注意,第三维in_channels,就是 参数input的第四维。
·strides:卷积时在图像每一维的步长,这 是一个一维的向量,长度为4。
·padding:定义元素边框与元素内容之间的空间。string类型的量,只能是SAME和VALID其中之一,这个值决定了不同的卷积方式,padding的值为’VALID’时,表示边缘不填充,当其为’SAME’时,表示填充到滤波器可以到达图像边缘。
·use_cudnn_on_gpu:bool类型,是否使用 cudnn加速,默认为true.
·返回值:tf.nn.conr2d函数结果返回一个 Tensor,这个输出就是feature map

padding规则介绍

padding属性的意义是定义元素边框与元素内容之间的空间。
在tf.nn.conv2d函数中,当变量padding为 VALID和SAME时,函数具体是怎么计算的呢? 其实是有公式的。我们规定:


·输入的尺寸中高和宽定义成in_height、 in_width。
·卷积核的高和宽定义成filter_height、 filter_width。
·输出的尺寸中高和宽定义成 output_height、output_width。
·步长的高宽方向定义成strides_height、 strides_ width。


1.VALID情况
输出的宽和高的公式代码分别为:
output_width = (in_width-filter_width+1)/strides_width(结果向上取整)
output_height = (in_height-filter_height+1)/strides_height(结果向上取整)
多余的数会舍去(drop)

2.SAME情况
输出的宽和高与卷积核无关,具体公式如下:
out_height = in_height / strides_height(结果向上取整)
out_width = in_width / strides_width(结果向上取整)
在SAME情况下,是需要补0的,规则如下:
pad_height = max((out_height-1)*strides_height+filter_height-in_height,0)
pad_width = max((out_width-1)*strides_width+filter_width-in_width,0)
解释:pad_height:表示高度方向填充0的行数
pad_width:表示宽度方向填充0的列数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值