1 TensorFlow中用到padding的地方

在TensorFlow中用到padding的地方主要有tf.nn.conv2d(),tf.nn.max_pool(),tf.nn.avg_pool()等,用法如下:

tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None,name=None) #来进行(二维数据)卷积操作

tf.nn.max_pool_with_argmax(input, ksize, strides, padding, Targmax=None, name=None) #实现最大池化

tf.nn.max_pool(value, ksize, strides, padding, name=None) #实现平均池化

当使用上边函数的时候需要传入所需的值,padding的值为字符串,可选值为'SAME' 和 'VALID' 。

2 为什么要padding

先介绍什么是padding。padding参数的作用是决定在进行卷积或池化操作时,是否对输入的图像矩阵边缘补0,'SAME' 为补零,'VALID' 则不补。其原因是因为在操作过程中过滤器可能不能将某个方向上的数据刚好处理完。

再说为什么要进行padding。举个例子来说:当步长为5,卷积核尺寸为6×6时,当padding为VALID时,则可能造成数据丢失(如上边的图),当padding为SAME时,则对其进行补零(如下边的图)。


最后从下图理解VALID与SAME两种模式的操作:“VALID”模式表示:当filter全部在image里面的时候,进行卷积运算。“SAME”模式表示:当filter的中心(K)与image的边角重合时,开始做卷积运算。

VALID 模式

SAME 模式

3 关于padding的计算

首先,定义变量:

  • 输入图片的宽和高:i_w 和 i_h
  • 输出特征图的宽和高:o_w 和 o_h
  • 过滤器的宽和高:f_w 和 f_h
  • 宽和高方向的步长:s_w 和 s_h
  • 宽和高方向总的补零个数:pad_w 和 pad_h
  • 顶部和底部的补零个数:pad_top 和 pad_bottom
  • 左部和右部的补零个数:pad_left 和 pad_right

3.1 VALID模式

输出的宽和高为:

o_w = (i_w - f_w + 1)/ s_w #(结果向上取整)
o_h = (i_h - f_h + 1)/ s_h #(结果向上取整)

3.2 SAME模式

输出的宽和高为:

o_w = i_w / s_w#(结果向上取整)
o_h = i_h / s_h#(结果向上取整)

各个方向的补零个数为:max()为取较大值,

pad_h = max(( o_h -1 ) × s_h + f_h - i_h , 0)
pad_top = pad_h / 2 # 注意此处向下取整
pad_bottom = pad_h - pad_top pad_w = max(( o_w -1 ) × s_w + f_w - i_w , 0)
pad_left = pad_w / 2 # 注意此处向下取整
pad_right = pad_w - pad_left

基于TensorFlow理解CNN中的padding参数的更多相关文章

  1. 【TensorFlow】一文弄懂CNN中的padding参数

    在深度学习的图像识别领域中,我们经常使用卷积神经网络CNN来对图像进行特征提取,当我们使用TensorFlow搭建自己的CNN时,一般会使用TensorFlow中的卷积函数和池化函数来对图像进行卷积和 ...

  2. 如何理解javaSript中函数的参数是按值传递

    本文是我基于红宝书<Javascript高级程序设计>中的第四章,4.1.3传递参数小节P70,进一步理解javaSript中函数的参数,当传递的参数是对象时的传递方式. (结合资料的个人 ...

  3. FaceRank-人脸打分基于 TensorFlow 的 CNN 模型

    FaceRank-人脸打分基于 TensorFlow 的 CNN 模型 隐私 因为隐私问题,训练图片集并不提供,稍微可能会放一些卡通图片. 数据集 130张 128*128 张网络图片,图片名: 1- ...

  4. 深入理解python中函数传递参数是值传递还是引用传递

    深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是"传对象引用 ...

  5. 理解CNN中的通道 channel

    在深度学习的算法学习中,都会提到 channels 这个概念.在一般的深度学习框架的 conv2d 中,如 tensorflow .mxnet ,channels 都是必填的一个参数. channel ...

  6. 理解 Python 中的可变参数 *args 和 **kwargs:

    默认参数:  Python是支持可变参数的,最简单的方法莫过于使用默认参数,例如: def getSum(x,y=5): print "x:", x print "y:& ...

  7. 理解CNN中的感受野(receptive-field)

    1. 阅读论文:Understanding the Effective Receptive Field in Deep Convolutional Neural Networks 理解感受野 定义:r ...

  8. CNN中的padding

    在使用TF搭建CNN的过程中,卷积的操作如下 convolution = tf.nn.conv2d(X, filters, strides=[1,2,2,1], padding="SAME& ...

  9. TensorFlow(3)CNN中的函数

    tf.nn.conv2d()函数 参数介绍: tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=Non ...

随机推荐

  1. 使用串口绘制实时曲线 —— SerialChart

    SerialChart:下载 1. 实验效果 2. 串口程序 ){ ){ y = ; x = ; } ) y++; else y--; z = sin(x*Pi/); p = cos(x*Pi/); ...

  2. ps快速将白底图片变为透明图片

    方法一: 如果图层有锁图标,则要点击它,然它消失.然后选中魔棒工具,然后点击图片上要透明的区域,按下backspace键即可. 方法二: 转载自:https://blog.csdn.net/sunyi ...

  3. visual studio 注释模板

    /*----------------------------------------------------------------* 项目名称 :$rootnamespace$* 项目描述 :* 类 ...

  4. It's a Mod, Mod, Mod, Mod World (类欧几里得模板题

    https://vjudge.net/contest/317000#problem/F #include <iostream> #include <cstdio> #inclu ...

  5. leetcode-86-分割链表

    题目描述: 方法一: # Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.va ...

  6. Duilib入门文档提供下载

    版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] Duilib入门文档 基本框架 编写界面xml 响应事件 贴图描述 类html文本描述 动态换肤 Dll插件 资源打包 Duil ...

  7. vue的无缝滚动插件vue-seamless-scroll的使用

    https://chenxuan0000.github.io/component-document/index_prod.html#/component/seamless-others 在vue环境下 ...

  8. VS2010-MFC(对话框:创建对话框类和添加控件变量)

    转自:http://www.jizhuomi.com/software/153.html 前两讲中讲解了如何创建对话框资源.创建好对话框资源后要做的就是生成对话框类了.生成对话框类主要包括新建对话框类 ...

  9. 运行pip报错:Fatal error in launcher: Unable to create process using '’路径’'

    参考此文:https://blog.csdn.net/cjeric/article/details/73518782 win7笔记本安装了Python2.7,Python3.7,以及anaconda3 ...

  10. Genymotion 的那些事

    一.什么是Genymotion? Genymotion是一套完整的工具,它提供了Android虚拟环境. 支持Windows.Linux和Mac OS等操作系统. 在Android开发中可以代替安卓模 ...