Python 膨胀卷积反卷积(tensorflow)示例

Python 膨胀卷积反卷积(tensorflow)示例,python,tensorflow,deconvolution,convolutional-neural-network,Python,Tensorflow,Deconvolution,Convolutional Neural Network,我正在尝试创建一个基于扩展卷积的自动编码器。我对不同的suntax和向下/向上采样方法感到困惑。我们如何仅为一个保留输入和输出大小的层执行此操作 -通过使用tf.nn.atrus\u conv2d然后tf.nn.atrus\u conv2d\u转置 -通过使用tf.nn.conv2d然后tf.nn.conv2d_转置 提前谢谢我做了如下事情。看来矩阵的大小是合理的。 对吗 X=tf.random_uniform(shape=(256,256,3),minval=0,maxval=100,dtyp

我正在尝试创建一个基于扩展卷积的自动编码器。我对不同的suntax和向下/向上采样方法感到困惑。我们如何仅为一个保留输入和输出大小的层执行此操作

-通过使用tf.nn.atrus\u conv2d然后tf.nn.atrus\u conv2d\u转置

-通过使用tf.nn.conv2d然后tf.nn.conv2d_转置


提前谢谢

我做了如下事情。看来矩阵的大小是合理的。 对吗

X=tf.random_uniform(shape=(256,256,3),minval=0,maxval=100,dtype=tf.float32,seed=None,name=None)

input2d = tf.reshape(X, [-1,256,256,3])
print(input2d.shape)

dilation_rate=2

in_channels=3
out_channels=32
kernelsize_h=4
kernelsize_w=4

filter = tf.get_variable("filter", [kernelsize_h, kernelsize_w, in_channels, out_channels], dtype=tf.float32,  initializer=tf.random_normal_initializer(0, 0.02))
output=tf.nn.atrous_conv2d(input2d, filter, rate=dilation_rate, padding="SAME")
print(output.shape)
filterBack = tf.get_variable("filterBack", [kernelsize_h, kernelsize_w, in_channels,out_channels], dtype=tf.float32, initializer=tf.random_normal_initializer(0, 0.02))
output_shape=[1,256,256,3]
reversed=tf.nn.atrous_conv2d_transpose(output,filterBack,output_shape,rate=dilation_rate,padding="SAME")
print(reversed.shape)
结果是: (1, 256, 256, 3) (1, 256, 256, 32)
(1,256,256,3)

我以前没有使用过膨胀,但我使用基于卷积的自动编码器。以下是采用输入大小为28x28x1(如mnist图像)的架构示例。使用2的步幅,大小将向下采样到14x14x1,然后采样到7x7x1。然后它将被展平,然后减小到32,即编码大小。之后,一组转置卷积层(步幅为2)将把大小增加回28x28x1

下面是代码示例:

def autoencoder_network(x):
encoder_14 = tf.layers.conv2d(x, filters=1, kernel_size=3, strides=2, padding='same', activation=tf.nn.relu)
encoder_7 = tf.layers.conv2d(encoder_14, filters=1,kernel_size=3, strides=2, padding='same', activation=tf.nn.relu)
flatten_dim = np.prod(encoder_7.get_shape().as_list()[1:])
flat = tf.reshape(encoder_7, [-1, flatten_dim])
code = tf.layers.dense(flat, 32, activation=tf.nn.relu)
hidden_decoder = tf.layers.dense(code, flatten_dim, activation=tf.nn.relu)
decoder_7 = tf.reshape(hidden_decoder, [-1, 7, 7, 1])
decoder_14 = tf.layers.conv2d_transpose(decoder_7, 1, 3, strides=2, padding='same', activation=tf.nn.relu)
output = tf.layers.conv2d_transpose(decoder_14, 1, 3, strides=2, padding='same', activation=tf.nn.relu)
return code, output