卷积和转置卷积,都涉及到padding, 那么添加padding 的具体方式,就会影响到计算结果,所以搞清除tensorflow中卷积和转置卷积的具体实现有助于模型的灵活部署应用。

一、卷积

举例说明:

    X:  1        2        3        4          5

       6        7        8        9         10

      11      12      13       14        15

      16      17       18      19        20

      21       22      23      24        25

    w:    1   1   1   1

1    2   1   1

      1    1   3   1

1    1   1   4

如对于:tf.nn.conv2(X,w,stride=[1,1],padding='SAME')

需要在X 中添加3 行 3列, 那么在tensorflow 中的添加方式如下:

left_w =  3/2    up_h =3/2

right_w = 3-left_w    down_h = 3- up_h

也即:  添加padding 时如左右、上下不能呢个平均分配,则左边<=右边,上边<=下边

故,卷积后的 (0,0)位置的值为,  1*2 + 2*1+ 3*1+ 6*1+7*3+8*1+11*1+12*1+14*4

二 、转置卷积

X:    1        2        3        4          5             w:    1         1         1          1

  6        7        8        9          10                    1         2         1          1

  11      12      13      14        15       1         2         3          1

  16      17      18      19        20

  21      22      23      24        25

tf.nn.conv2d_transpose(X,W,tf.stack([10,10]),strides=[2,2],padding="SAME")

1、对X扩展,

strides=[2,2] 故扩展后的 X 为:(shape:10X10)

1     0     2     0     3    0     4    0     5     0

0     0     0     0     0    0     0    0     0     0

6     0     7     0     8    0     9    0     10   0

.      .      .      .      .     .      .     .       .     .

.      .      .      .      .     .      .     .       .     .

2、加padding,由于padding = "SAME"  所以需要加 3行 3列

对X 扩展再加padding 后的 高和宽为:

H = X.H * stride + (w.H-1)

W = X.W*stride + (w.W-1)

l_h = ceil(((w.H - 1)*1.0 + (stride - 1)) / 2.0);       // 向上取整数

l_h = l_h>(w.H - 1) ? (w.H - 1) : l_h;  // 在左边添加padding 的列数

up_w = ceil(((w.W - 1)*1.0 + (stride - 1)) / 2.0)    // 向上取整数

up_w = up_w>(w.W - 1) ? (w.W - 1) : up_h;   // 在上边添加padding 的行数

说明:

input.shape:  5X5   ; stride = 3 ; w.shape =5*5  padding = "SAME" 时

扩展后,input.shape = 15*15 , 其中 最右边扩展2列, 最下边扩展2行

加padding后, input.shape = 19*19, 其中在最左边扩展3列, 最上边扩展3行; 最右边再扩展1列,最下边再扩展1行

卷积(步长为1)后  , output .shape = 15*15

3、卷积

tensorflow 中conv2d_transpose对卷积的实现有别于conv2,  相当于将 w 进行reverse 后进行卷积。

tensorflow中卷积、转置卷积具体实现方式的更多相关文章

  1. 第十四节,TensorFlow中的反卷积,反池化操作以及gradients的使用

    反卷积是指,通过测量输出和已知输入重构未知输入的过程.在神经网络中,反卷积过程并不具备学习的能力,仅仅是用于可视化一个已经训练好的卷积神经网络,没有学习训练的过程.反卷积有着许多特别的应用,一般可以用 ...

  2. 深度学习卷积网络中反卷积/转置卷积的理解 transposed conv/deconv

    搞明白了卷积网络中所谓deconv到底是个什么东西后,不写下来怕又忘记,根据参考资料,加上我自己的理解,记录在这篇博客里. 先来规范表达 为了方便理解,本文出现的举例情况都是2D矩阵卷积,卷积输入和核 ...

  3. TensorFlow中tf.ConfigProto()配置Sesion运算方式

    博主个人网站:https://chenzhen.online tf.configProto用于在创建Session的时候配置Session的运算方式,即使用GPU运算或CPU运算: 1. tf.Con ...

  4. TensorFlow中CNN的两种padding方式“SAME”和“VALID”

    来源 dilation_rate为一个可选的参数,默认为1,这里我们可以先不管它. 整理一下,对于"VALID",输出的形状计算如下: new_height=new_width=⌈ ...

  5. 由浅入深:CNN中卷积层与转置卷积层的关系

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由forrestlin发表于云+社区专栏 导语:转置卷积层(Transpose Convolution Layer)又称反卷积层或分数卷 ...

  6. tensorflow 卷积/反卷积-池化/反池化操作详解

    Plese see this answer for a detailed example of how tf.nn.conv2d_backprop_input and tf.nn.conv2d_bac ...

  7. TensorFlow中设置学习率的方式

    目录 1. 指数衰减 2. 分段常数衰减 3. 自然指数衰减 4. 多项式衰减 5. 倒数衰减 6. 余弦衰减 6.1 标准余弦衰减 6.2 重启余弦衰减 6.3 线性余弦噪声 6.4 噪声余弦衰减 ...

  8. TensorFlow中实现RNN,彻底弄懂time_step

    这篇博客不是一篇讲解原理的博客,这篇博客主要讲解tnesorlfow的RNN代码结构,通过代码来学习RNN,以及讲解time_steps,如果这篇博客没有让你明白time_steps,欢迎博客下面评论 ...

  9. Tensorflow中卷积的padding方式

    根据tensorflow中的Conv2D函数,先定义几个基本符号: 输入矩阵W*W,这里只考虑输入宽高相等的情况,如果不相等,推导方法一样 filter矩阵F*F,卷积核 stride值S,步长 输出 ...

随机推荐

  1. django基础之day09,手机号校验的规则和代码编写

    通过re模块实现手机号码校验的脚本--json老师 import re 通过re模块实现手机号码校验的脚本--json老师 def mobile_validate(value): mobile_re ...

  2. 深入探索Java设计模式之构建器模式(五)

    抽丝剥茧 细说架构那些事——[优锐课] 简单的程序不需要大量的设计过程,因为它们只关注有限的解决方案,仅使用几个类.大型程序专注于广泛的设计,该设计比好的设计范例的任何其他属性都更能利用可重用性.宏伟 ...

  3. 中文分词接口api,采用结巴分词PHP版中文分词接口

    中文分词,分词就是将连续的字序列按照一定的规范重新组合成词序列的过程.我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字.句和段能通过明显的分界符来简单划界,唯独词没有一个形式上 ...

  4. c++-重载运算符(+-,++,--,+=,-=,cin,cout)

    操作符重载 自定义类型需要操作符重载 运算符重载入门技术推演 友元函数和成员函数实现2元运算符重载 友元函数和成员函数实现1元运算符重载(前置++,前置--,后置++,后置--) 友元函数实现运算符重 ...

  5. 现代前端库开发指南系列(二):使用 webpack 构建一个库

    前言 在前文中,我说过本系列文章的受众是在现代前端体系下能够熟练编写业务代码的同学,因此本文在介绍 webpack 配置时,仅提及构建一个库所特有的配置,其余配置请参考 webpack 官方文档. 输 ...

  6. 64-Weave 如何与外网通信?

    上一节我们学习了 Weave 网络内部如何通信,今天讨论 Weave 如何与外界通信. weave 是一个私有的 VxLAN 网络,默认与外部网络隔离.外部网络如何才能访问到 weave 中的容器呢? ...

  7. [转]加密算法(DES,AES,RSA,MD5,SHA1,Base64)比较和项目应用

    原文链接:http://www.cnblogs.com/sochishun/p/7028056.html 加密技术通常分为两大类:"对称式"和"非对称式". 对 ...

  8. Jmeter中使用HTTP信息头管理器发送json格式请求体的接口

    Jmeter中,如果请求体的格式为x-www-form-urlencoded,则不需要添加请求头,保持默认即可,但是如果遇到接口的请求体格式为json时,就要用到HTTP信息头管理器,在线程组上右键— ...

  9. 解决video.js不兼容ie8问题

    使用视频播放器的时候,常常会让兼容一些浏览器问题,比如兼容ie8浏览器.在工作中使用的是video.js. 如果需要兼容,引入两个js库,就可以做到兼容ie8浏览器 <script src=&q ...

  10. How to: Use the Entity Framework Model First in XAF 如何:在 XAF 中使用EF ModelFirst

    This topic demonstrates how to use the Model First entity model and a DbContext entity container in ...