tensorflow中卷积、转置卷积具体实现方式
卷积和转置卷积,都涉及到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中卷积、转置卷积具体实现方式的更多相关文章
- 第十四节,TensorFlow中的反卷积,反池化操作以及gradients的使用
反卷积是指,通过测量输出和已知输入重构未知输入的过程.在神经网络中,反卷积过程并不具备学习的能力,仅仅是用于可视化一个已经训练好的卷积神经网络,没有学习训练的过程.反卷积有着许多特别的应用,一般可以用 ...
- 深度学习卷积网络中反卷积/转置卷积的理解 transposed conv/deconv
搞明白了卷积网络中所谓deconv到底是个什么东西后,不写下来怕又忘记,根据参考资料,加上我自己的理解,记录在这篇博客里. 先来规范表达 为了方便理解,本文出现的举例情况都是2D矩阵卷积,卷积输入和核 ...
- TensorFlow中tf.ConfigProto()配置Sesion运算方式
博主个人网站:https://chenzhen.online tf.configProto用于在创建Session的时候配置Session的运算方式,即使用GPU运算或CPU运算: 1. tf.Con ...
- TensorFlow中CNN的两种padding方式“SAME”和“VALID”
来源 dilation_rate为一个可选的参数,默认为1,这里我们可以先不管它. 整理一下,对于"VALID",输出的形状计算如下: new_height=new_width=⌈ ...
- 由浅入深:CNN中卷积层与转置卷积层的关系
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由forrestlin发表于云+社区专栏 导语:转置卷积层(Transpose Convolution Layer)又称反卷积层或分数卷 ...
- tensorflow 卷积/反卷积-池化/反池化操作详解
Plese see this answer for a detailed example of how tf.nn.conv2d_backprop_input and tf.nn.conv2d_bac ...
- TensorFlow中设置学习率的方式
目录 1. 指数衰减 2. 分段常数衰减 3. 自然指数衰减 4. 多项式衰减 5. 倒数衰减 6. 余弦衰减 6.1 标准余弦衰减 6.2 重启余弦衰减 6.3 线性余弦噪声 6.4 噪声余弦衰减 ...
- TensorFlow中实现RNN,彻底弄懂time_step
这篇博客不是一篇讲解原理的博客,这篇博客主要讲解tnesorlfow的RNN代码结构,通过代码来学习RNN,以及讲解time_steps,如果这篇博客没有让你明白time_steps,欢迎博客下面评论 ...
- Tensorflow中卷积的padding方式
根据tensorflow中的Conv2D函数,先定义几个基本符号: 输入矩阵W*W,这里只考虑输入宽高相等的情况,如果不相等,推导方法一样 filter矩阵F*F,卷积核 stride值S,步长 输出 ...
随机推荐
- jsp(九大内置对象,三大指令)
九大内置对象JSP中一共预先定义了9个这样的对象,分别为:request.response.session.application.out.pagecontext.config.page.except ...
- 延迟队列DelayQueue take() 源码分析
延迟队列DelayQueue take() 源码分析 在工作中使用了延迟队列,对其内部的实现很好奇,于是就研究了一下其运行原理,在这里就介绍一下take()方法的源码 1 take()源码 如下所示 ...
- eclipse 创建 springboot项目
file --> new --> project --> Spring Boot --> Spring start project Group:公司域名倒置,一般是com ...
- RHEL/CentOS 安装最新版Nginx
本篇简单介绍如何在RHEL/CentOS安装最新版本的Nginx. Step 1:安装yum-utils [root@localhost ~]# cat /etc/redhat-release Cen ...
- Python学习:50 行 Python 代码,带你追到最心爱的人
程序员世纪难题 人们一提到程序员第一反应就是:我知道!他们工资很高啊!但大部分都是单身狗,不懂得幽默风趣,只是每天穿格子 polo 衫的宅男一个.甚至程序员自己也这样形容自己:钱多话少死的早.程序员总 ...
- 学习 C#,从 Hello world 开始吧
目录 Hello world 创建.编辑.编译和运行 C# 源代码 使用 .NET Core 命令行接口 (CLI) 工具 使用 Visual Studio 创建项目 编译和执行 总结 C#(读作 & ...
- 基于SpringBoot前后端分离的点餐系统
基于SpringBoot前后端分离的点餐系统 开发环境:主要采用Spring boot框架和小程序开发 项目简介:点餐系统,分成卖家端和买家端.买家端使用微信小程序开发,实现扫码点餐.浏览菜单.下单. ...
- 【Java并发系列】--Java内存模型
Java内存模型 1 基本概念 程序:代码,完成某一个任务的代码序列(静态概念) 进程:程序在某些数据上的一次运行(动态) 线程:一个进程有一个或多个线程组成(占有资源的独立单元) 2 JVM与线程 ...
- tomcat修改使用指定的jdk版本
linux安装的jdk1.6,无法满足当前tomcat项目使用,所以需要指定为更高版本的jdk. 主要修改tomcat bin目录下的catalina.sh和setclasspath.sh文件 添加内 ...
- web.xml的常见配置
web.xml的常见配置 <!-- 配置全局的编码过滤器 --> <filter> <description>编码过滤器</description> & ...