前面是max_pool第二个参数是卷积核,第三个参数是对应步长,

import tensorflow as tf
sess=tf.Session()
x = tf.constant([[1., 2., 3.],[4., 5., 6.],[7., 8., 9.]])x = tf.reshape(x, [1, 3, 3, 1])  # give a shape accepted by tf.nn.max_pool
valid_pad = tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], padding='VALID')
same_pad = tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], padding='SAME')
print(sess.run(valid_pad))
print("--------------")
print(sess.run(same_pad))
import tensorflow as tf
sess=tf.Session()
x = tf.constant([[1., 2., 3.],[4., 5., 6.]])x = tf.reshape(x, [1, 2, 3, 1])  # give a shape accepted by tf.nn.max_pool
valid_pad = tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], padding='VALID')
same_pad = tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], padding='SAME')
print(sess.run(valid_pad))
print("--------------")
print(sess.run(same_pad))x = tf.reshape(x, [1, 3, 2, 1])  # give a shape accepted by tf.nn.max_pool
same_pad = tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], padding='SAME')
print("--------------")
print(sess.run(same_pad))
[[[[ 5.]]]]
--------------
[[[[ 5.][ 6.]]]]
--------------
[[[[ 4.]][[ 6.]]]]

tensorflow conv2d的padding解释以及参数解释


1、padding的方式:

说明:1、摘录自http://stackoverflow.com/questions/37674306/what-is-the-difference-between-same-and-valid-padding-in-tf-nn-max-pool-of-t2、不同的padding方式,VALID是采用丢弃的方式,比如上述的input_width=13,只允许滑动2次,多余的元素全部丢掉3、SAME的方式,采用的是补全的方式,对于上述的情况,允许滑动3次,但是需要补3个元素,左奇右偶,在左边补一个0,右边补2个04、For the SAME padding, the output height and width are computed as:
  • out_height = ceil(float(in_height) / float(strides[1]))

    out_width = ceil(float(in_width) / float(strides[2]))

  • For the VALID padding, the output height and width are computed as:

    out_height = ceil(float(in_height - filter_height + 1) / float(strides[1]))

    out_width = ceil(float(in_width - filter_width + 1) / float(strides[2]))

2、conv2d的参数:

1、strides[0] = strides[3] = 13、conv2d的参数解释:

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

除去name参数用以指定该操作的name,与方法有关的一共五个参数

第一个参数input:指需要做卷积的输入图像,它要求是一个Tensor,具有[batch, in_height, in_width, in_channels]这样的shape,具体含义是[训练时一个batch的图片数量, 图片高度, 图片宽度, 图像通道数],注意这是一个4维的Tensor,要求类型为float32和float64其中之一第二个参数filter:相当于CNN中的卷积核,它要求是一个Tensor,具有[filter_height, filter_width, in_channels, out_channels]这样的shape,具体含义是[卷积核的高度,卷积核的宽度,图像通道数,卷积核个数],要求类型与参数input相同,filter的通道数要求与input的in_channels一致,有一个地方需要注意,第三维in_channels,就是参数input的第四维

第三个参数strides:卷积时在图像每一维的步长,这是一个一维的向量,长度4,strides[0]=strides[3]=1第四个参数padding:string类型的量,只能是"SAME","VALID"其中之一,这个值决定了不同的卷积方式(后面会介绍)第五个参数:use_cudnn_on_gpu:bool类型,是否使用cudnn加速,默认为true结果返回一个Tensor,这个输出,就是我们常说的feature map4、conv2d的例子:那么TensorFlow的卷积具体是怎样实现的呢,用一些例子去解释它:

1、
[python] view plain copy
  1. import tensorflow as tf
  2. #case 2
  3. input = tf.Variable(tf.random_normal([1,3,3,5]))
  4. filter = tf.Variable(tf.random_normal([1,1,5,1]))
  5. op = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='VALID')
  6. with tf.Session() as sess:
  7. sess.run(tf.initialize_all_variables())
  8. res = (sess.run(op))
  9. print (res.shape)
2、
[python] view plain copy
  1. import tensorflow as tf
  2. input = tf.Variable(tf.random_normal([1,5,5,5]))
  3. filter = tf.Variable(tf.random_normal([3,3,5,1]))
  4. op = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='VALID')
  5. with tf.Session() as sess:
  6. sess.run(tf.initialize_all_variables())
  7. res = (sess.run(op))
  8. print (res.shape)
说明:1、使用VALID方式,feature map的尺寸为out_height = ceil(float(in_height - filter_height + 1) / float(strides[1]))=(5-3+1)/1 = 3out_width = ceil(float(in_width - filter_width + 1) / float(strides[2])) = (5-3+1)/1 = 3所以,feature map的尺寸为3*32、filter的参数个数为3*3*5*1,也即对于输入的每个通道数都对应于一个3*3的滤波器,然后共5个通道数,conv2d的过程就是对5个输入进行点击然后求和,得到一张feature map。如果要得到3张feature map,那么应该使用的参数为3*3*5*3个参数.

Tensorflow中padding的两种类型SAME和VALID相关推荐

  1. 在c语言程序设计中函数有两种类型 和,在C语言程序设计中函数有两种类型:__________和__________...

    在C语言程序设计中函数有两种类型:__________和__________ 以下程序的输出结果是()intA:6B:3C:2D:1 红楼梦中提到的名菜有A:酒酿清蒸鸭子B:奶油松瓤卷酥C:四喜丸子D ...

  2. java类型转换答案,在java中支持两种类型的类型转换,自动类型转换和强制类型转换。父类转化为子类需要强制转换。...

    在java中支持两种类型的类型转换,自动类型转换和强制类型转换.父类转化为子类需要强制转换. 更多相关问题 计算机病毒通过()传染扩散得极快,危害最大. 当一个现象的数量由小变大,另一个现象的数量相反 ...

  3. ipv6单播地址包括哪两种类型_IPV6中为啥没有ARP了呢?一文带你搞懂NDP邻居发现协议...

    前言 前面我们介绍了ICMPv6协议 除了提供ICMPv4常用的基本功能之外,还有邻居发现(ND)的功能.一文带你看懂ICMPv6和ICMPv4的区别 那么究竟什么是邻居发现协议(ND)呢? 邻居发现 ...

  4. c语言上11e2是实型常量吗,在C语言中的实型变量分为两种类型.doc

    在C语言中的实型变量分为两种类型.doc 第二章 练习题 一.填空题 1.在C语言中的实型变量分为两种类型,它们是float型和( )型. 2.若有定义:char c='\010';则变量c中包含的字 ...

  5. FLASH中的BOOT Sectored 和 Uniform Sectored两种类型的区别和联系

    关注+星标公众号,及时获取更多技术分享~  作者 | 冰茶奥利奥 微信公众号 | 嵌入式电子创客街 前天有一个同事过来问我一个问题,就是他们一直在生产的一个板卡上的一篇镁光的芯片停产了,问我用这系列的 ...

  6. 计算机中数的存储和处理都使用二进制对吗,计算机中的数据可分为两种类型:数字和字符,它们最终都要转换为二进制代码进行存储和处理。对于人们习惯的十进制数字,通常用____进行转换。...

    计算机中的数据可分为两种类型:数字和字符,它们最终都要转换为二进制代码进行存储和处理.对于人们习惯的十进制数字,通常用____进行转换. 更多相关问题 [单选] 电力线路巡视检查周期,定期巡视每月至少 ...

  7. c语言中的实型变量语法,在C语言中的实型变量分为两种类型

    在C语言中的实型变量分为两种类型 第二章 练习题 一.填空题 1.在C语言中的实型变量分为两种类型,它们是float型和( )型. 2.若有定义:char c= \010 ;则变量c中包含的字符个数为 ...

  8. (发现)问题才是推动创新的动力系列:两种类型硬币(均匀和非均匀)能否用第一次得正面朝上的概率推断“第一第二次依次获得正面反面情况”的概率?

    两种类型硬币(均匀和非均匀)能否用第一次得正概率推断,第一第二次依次获得正反概率? 2种硬币 均匀的 COIN1  正反概率(正0.5  反0.5) 非均匀的COIN2 (正0.9  反0.1) 问题 ...

  9. 设计一个处理两种类型地址的地址簿程序_编译器设计-符号表-中间代码生成

    编译器设计-符号表-中间代码生成 Compiler Design - Symbol Table Compiler - Intermediate Code Generation 一.Compiler D ...

最新文章

  1. matlab 无序数对,MATLAB中sort函数对矩阵数进行排序
  2. 史上最全的Linux常用——目录和文件管理命令——收藏这一篇就够了!(超全,超详细)
  3. vue --- 使用vue-router获取带参数的路由
  4. php7 变量,PHP7变量结构分析
  5. 从单纯聊天到在线生活
  6. Python 新手入门引导
  7. 【英语学习】【WOTD】shanghai 释义/词源/示例
  8. 反比例函数matlab,matlab拟合指定反比例函数,在线等
  9. JSTL-格式标签库
  10. 在向服务器发送请求时发生传输级错误。 (provider: TCP 提供程序, error: 0 - 远程主机强迫关闭了一个现有的连接。)...
  11. .Net中Cookie乱码解决方法
  12. excel表格怎么调整行高和列宽_excel表格怎么调整高度和宽度
  13. 算法: 唯一路径62. Unique Paths
  14. 【论文笔记】使用物理原理和领域知识进行无标注的监督学习
  15. 解决:当笔记本连接WIFi,电脑可以打开QQ等,但是不能打开网页,显示DNS错误
  16. android动态style,Android控件动态设置style的问题
  17. 井字棋(棋子可消去(拿走))
  18. window如何彻底卸载软件教程
  19. 51单片机入门教程(3)——数码管显示学号
  20. 【pygame游戏】用Python实现一个蔡徐坤大战篮球的小游戏,可还行?【附源码】

热门文章

  1. mysql主从复制延时性问题_MySQL主从同步延迟原因及解决办法
  2. php yield 递归,递归运行所有yield请求h的废弃输出文件
  3. 利用单调栈判断二叉搜索树的后序遍历序列
  4. python 描述器_python 描述器
  5. python计算出nan_python如何进行汇总统计?
  6. 2019考研调剂信息 计算机专业,东莞理工学院2019年考研调剂信息(计算机科学与技术、环境工程专业)...
  7. java如何判断打印是否成功_如何验证Zebra打印机是否使用ZPL和C#成功打印(或能够检测到错误)?...
  8. java ssh工具类_JAVA SSH2工具类
  9. python判断数据类型type_Python 判断数据类型有type和isinstance
  10. 周杰伦新动作的老朋友是谁?程序员:送分题!