赞
踩
目标——主要用来进行上采样,使图像形状变大
函数:conv2d_transpose(value, filter, output_shape, strides, padding="SAME", data_format="NHWC", name=None)
Arg:
value:指需要做反卷积的输入图像,它要求是一个Tensor
filter:卷积核,它要求是一个Tensor,具有[filter_height, filter_width, out_channels, in_channels]这样的shape,具体含义是[卷积核的高度,卷积核的宽度,卷积核个数,图像通道数]
output_shape:反卷积操作输出的shape,细心的同学会发现卷积操作是没有这个参数的,那这个参数在这里有什么用呢?下面会解释这个问题
strides:反卷积时在图像每一维的步长,这是一个一维的向量,长度4
padding:string类型的量,只能是"SAME","VALID"其中之一,这个值决定了不同的卷积方式
data_format:string类型的量,'NHWC'和'NCHW'其中之一,这是tensorflow新版本中新加的参数,它说明了value参数的数据格式。'NHWC'指tensorflow标准的数据格式[batch, height, width, in_channels],'NCHW'指Theano的数据格式,[batch, in_channels,height, width],当然默认值是'NHWC'
注意:tf.nn.conv2d中的filter参数,是[filter_height, filter_width, in_channels, out_channels]的形式,而tf.nn.conv2d_transpose中的filter参数,是[filter_height, filter_width, out_channels,in_channels]的形式,注意in_channels和out_channels反过来了!因为两者互为反向,所以输入输出要调换位置
output_shape的作用——不同的图像大小经过相同的卷积操作可能得到相同的图像,反卷积的output_shape就是指定具有这种性子的图片的反卷积后的形状
[1,6,6,3]和[1,5,5,3]的图经过卷积得到了相同的大小,[1,3,3,1],反卷积的output_shape可以指定为[1,6,6,3]和[1,5,5,3]
实例
- #反卷积
- import tensorflow as tf
- import numpy as np
- input=np.array([[[[1],[1],[1]],[[1],[1],[1]],[[1],[1],[1]]]])
- print(input.shape)
- #input=tf.Variable(input,dtype=tf.float32)
- input=tf.constant(input,dtype=tf.float32)
- weight=np.array([[[[1],[1],[1]],[[1],[1],[1]],[[1],[1],[1]]]])
- weight=tf.Variable(weight,dtype=tf.float32)
- weight=tf.constant(value=1,dtype=tf.float32,shape=[3,3,1,1])
- #out=tf.nn.conv2d_transpose(input,filters=weight,output_shape=1,strides=[1,2,2,1])
- out=tf.nn.conv2d_transpose(input,weight,[1,6,6,1],strides=[1,2,2,1])
- print(out)
- #init=tf.global_variables_initializer()
- with tf.Session() as sess:
- #sess.run(init)
- out,weight=sess.run([out,weight])
- print(out)
- print(weight)
输出
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。