关于tensorflow中转置卷积使用的理解
来源:互联网 发布:淘宝达人 app 编辑:程序博客网 时间:2024/06/05 15:00
在FCN,U-net,GAN中都有使用转置卷积(Transposed Convolution)的过程,转置卷积不能单纯地理解为逆卷积(deconvolution)。
在CNN正向卷积过程是一个将图片变小的过程,转置卷积使得图片逐渐变大,直至与原图一样大。
如何理解转置卷积呢,可以先从将卷积的计算转换成矩阵的计算来开始。
好了,到这儿大致了解了转置卷积是什么,能干什么了。也就是由卷积后得到的小图经过转置卷积可以得到大一点的图(这比喻不太恰当,意会就好)。
下面是tensorflow中关于转置卷积的API
这儿再附上tf中关于padding参数的用法:
好了,最后实战一下,怎么用tf中的转置卷积:
import tensorflow as tf# 正向卷积 # 输入尺度 [batch, height, width, in_channels]inputx=tf.random_normal([100,255,255,3],dtype=tf.float32) # kernel [height, width, in_channels, output_channels]w=tf.random_normal(shape=[5,5,3,10],dtype=tf.float32) # 卷积输出 (100, 126, 126, 10),注意:这儿用的是VALIDoutputy=tf.nn.conv2d(input=inputx,filter=w,strides=[1,2,2,1],padding='VALID')
用卷积计算输出很容易,但是如果我现在想根据输出图片的大小,怎么设置卷积核的尺寸和strides呢?先贴代码
# 转置卷积# 输入的value [batch, height, width, in_channels]value=tf.random_normal(shape=[100,126,126,10])# filter [height, width, output_channels, in_channels]w=tf.random_normal(shape=[4,4,3,10])# 转置卷积得出的结果result=tf.nn.conv2d_transpose(value=value,filter=w,output_shape=[100,255,255,3],strides=[1,2,2,1],padding='VALID')with tf.Session() as sess: tf.global_variables_initializer().run() # sess.run(outputy) # print(outputy.shape) sess.run(result) print(result.shape)
其实有个很简单的思路,就是像计算卷积那样计算转置卷积。这句话是这么个意思,比如代码中我要得到255*255*3的一张图片(也就是经过转置卷积放大的图片),第一步我们要确定我们用什么padding方式,不同的padding方式确定不同的计算模式。代码中我们使用VALID模式,那么根据转置卷积的输入value是126*126*10的图片,根据计算公式
设kernel等于4,stride算出来正好是2。
如果设置padding是SAME呢,据公式
参考链接:http://blog.csdn.net/u013250416/article/details/78247818,
https://www.tensorflow.org/api_docs/python/tf/nn/conv2d_transpose,
https://www.tensorflow.org/api_docs/python/tf/nn/convolution,
《a guide to convolution arithmetic for deep learning》
- 关于tensorflow中转置卷积使用的理解
- 关于卷积的一点理解
- 关于CNN的卷积理解
- 记录使用tensorflow实现大卷积核卷积的代码
- Tensorflow卷积操作tf.nn.conv2d的理解
- TensorFlow中CNN/卷积神经网络算法的理解
- 关于卷积---各行各业从业者的理解
- CNN的超参数 & 宽卷积和窄卷积的理解及tensorflow中的实现
- 关于照片在imageView中转置的问题
- 【TensorFlow】TensorFlow 的卷积神经网络 CNN
- 关于TensorFlow的使用1
- 关于卷积核为何有效的初级理解
- TensorFlow人工智能引擎入门教程之二 CNN卷积神经网络的基本定义理解。
- TensorFlow学习笔记(1)对多层卷积网络识别MNIST(MNIST进阶)的理解
- 卷积的理解
- 卷积的乘法理解
- 卷积的理解【转】
- 卷积的理解
- Mac “'chromedriver' executable needs to be in PATH”
- 基于PCL的三维重建——点云的滤波处理
- Git教程
- github常用小记
- Git基本命令总结
- 关于tensorflow中转置卷积使用的理解
- Python 练习实例22
- 带头结点的单链表就地逆置
- LintCode之13 字符串查找
- 一元二次方程组膜下解
- Centos7 安装java, python 环境
- Hibernate入门学习(1)----认识ORM及Hibernate
- LeetCode#9-Palindrome Number
- android--关于ViewPropertyAnimator中Rotation/X/Y方法的使用