Tensorflow中padding的两种类型SAME和VALID
前面是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_height, filter_width, in_channels, out_channels]
第二个参数filter:相当于CNN中的卷积核,
它要求是一个Tensor,具有这样的shape
,具体含义是],要求类型与参数input相同,filter的通道数要求与input的in_channels一致,有一个地方需要注意,第三维
[卷积核的高度,
卷积核的宽度,图像通道数,卷积核个数
,就是参数input的第四维
in_channels
第三个参数strides:卷积时在图像每一维的步长,这是一个一维的向量,长度4,strides[0]=strides[3]=1
第四个参数padding:string类型的量,只能是"SAME","VALID"其中之一,这个值决定了不同的卷积方式(后面会介绍)
第五个参数:use_cudnn_on_gpu:bool类型,是否使用cudnn加速,默认为true
结果返回一个Tensor,这个输出,就是我们常说的feature map
4、conv2d的例子:那么TensorFlow的卷积具体是怎样实现的呢,用一些例子去解释它: 1、
- import tensorflow as tf
- #case 2
- input = tf.Variable(tf.random_normal([1,3,3,5]))
- filter = tf.Variable(tf.random_normal([1,1,5,1]))
- op = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='VALID')
- with tf.Session() as sess:
- sess.run(tf.initialize_all_variables())
- res = (sess.run(op))
- print (res.shape)
2、
- import tensorflow as tf
- input = tf.Variable(tf.random_normal([1,5,5,5]))
- filter = tf.Variable(tf.random_normal([3,3,5,1]))
- op = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='VALID')
- with tf.Session() as sess:
- sess.run(tf.initialize_all_variables())
- res = (sess.run(op))
- 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相关推荐
- 在c语言程序设计中函数有两种类型 和,在C语言程序设计中函数有两种类型:__________和__________...
在C语言程序设计中函数有两种类型:__________和__________ 以下程序的输出结果是()intA:6B:3C:2D:1 红楼梦中提到的名菜有A:酒酿清蒸鸭子B:奶油松瓤卷酥C:四喜丸子D ...
- java类型转换答案,在java中支持两种类型的类型转换,自动类型转换和强制类型转换。父类转化为子类需要强制转换。...
在java中支持两种类型的类型转换,自动类型转换和强制类型转换.父类转化为子类需要强制转换. 更多相关问题 计算机病毒通过()传染扩散得极快,危害最大. 当一个现象的数量由小变大,另一个现象的数量相反 ...
- ipv6单播地址包括哪两种类型_IPV6中为啥没有ARP了呢?一文带你搞懂NDP邻居发现协议...
前言 前面我们介绍了ICMPv6协议 除了提供ICMPv4常用的基本功能之外,还有邻居发现(ND)的功能.一文带你看懂ICMPv6和ICMPv4的区别 那么究竟什么是邻居发现协议(ND)呢? 邻居发现 ...
- c语言上11e2是实型常量吗,在C语言中的实型变量分为两种类型.doc
在C语言中的实型变量分为两种类型.doc 第二章 练习题 一.填空题 1.在C语言中的实型变量分为两种类型,它们是float型和( )型. 2.若有定义:char c='\010';则变量c中包含的字 ...
- FLASH中的BOOT Sectored 和 Uniform Sectored两种类型的区别和联系
关注+星标公众号,及时获取更多技术分享~ 作者 | 冰茶奥利奥 微信公众号 | 嵌入式电子创客街 前天有一个同事过来问我一个问题,就是他们一直在生产的一个板卡上的一篇镁光的芯片停产了,问我用这系列的 ...
- 计算机中数的存储和处理都使用二进制对吗,计算机中的数据可分为两种类型:数字和字符,它们最终都要转换为二进制代码进行存储和处理。对于人们习惯的十进制数字,通常用____进行转换。...
计算机中的数据可分为两种类型:数字和字符,它们最终都要转换为二进制代码进行存储和处理.对于人们习惯的十进制数字,通常用____进行转换. 更多相关问题 [单选] 电力线路巡视检查周期,定期巡视每月至少 ...
- c语言中的实型变量语法,在C语言中的实型变量分为两种类型
在C语言中的实型变量分为两种类型 第二章 练习题 一.填空题 1.在C语言中的实型变量分为两种类型,它们是float型和( )型. 2.若有定义:char c= \010 ;则变量c中包含的字符个数为 ...
- (发现)问题才是推动创新的动力系列:两种类型硬币(均匀和非均匀)能否用第一次得正面朝上的概率推断“第一第二次依次获得正面反面情况”的概率?
两种类型硬币(均匀和非均匀)能否用第一次得正概率推断,第一第二次依次获得正反概率? 2种硬币 均匀的 COIN1 正反概率(正0.5 反0.5) 非均匀的COIN2 (正0.9 反0.1) 问题 ...
- 设计一个处理两种类型地址的地址簿程序_编译器设计-符号表-中间代码生成
编译器设计-符号表-中间代码生成 Compiler Design - Symbol Table Compiler - Intermediate Code Generation 一.Compiler D ...
最新文章
- matlab 无序数对,MATLAB中sort函数对矩阵数进行排序
- 史上最全的Linux常用——目录和文件管理命令——收藏这一篇就够了!(超全,超详细)
- vue --- 使用vue-router获取带参数的路由
- php7 变量,PHP7变量结构分析
- 从单纯聊天到在线生活
- Python 新手入门引导
- 【英语学习】【WOTD】shanghai 释义/词源/示例
- 反比例函数matlab,matlab拟合指定反比例函数,在线等
- JSTL-格式标签库
- 在向服务器发送请求时发生传输级错误。 (provider: TCP 提供程序, error: 0 - 远程主机强迫关闭了一个现有的连接。)...
- .Net中Cookie乱码解决方法
- excel表格怎么调整行高和列宽_excel表格怎么调整高度和宽度
- 算法: 唯一路径62. Unique Paths
- 【论文笔记】使用物理原理和领域知识进行无标注的监督学习
- 解决:当笔记本连接WIFi,电脑可以打开QQ等,但是不能打开网页,显示DNS错误
- android动态style,Android控件动态设置style的问题
- 井字棋(棋子可消去(拿走))
- window如何彻底卸载软件教程
- 51单片机入门教程(3)——数码管显示学号
- 【pygame游戏】用Python实现一个蔡徐坤大战篮球的小游戏,可还行?【附源码】
热门文章
- mysql主从复制延时性问题_MySQL主从同步延迟原因及解决办法
- php yield 递归,递归运行所有yield请求h的废弃输出文件
- 利用单调栈判断二叉搜索树的后序遍历序列
- python 描述器_python 描述器
- python计算出nan_python如何进行汇总统计?
- 2019考研调剂信息 计算机专业,东莞理工学院2019年考研调剂信息(计算机科学与技术、环境工程专业)...
- java如何判断打印是否成功_如何验证Zebra打印机是否使用ZPL和C#成功打印(或能够检测到错误)?...
- java ssh工具类_JAVA SSH2工具类
- python判断数据类型type_Python 判断数据类型有type和isinstance
- 周杰伦新动作的老朋友是谁?程序员:送分题!