0

我正在尝试创建一个基于扩张卷积的自动编码器。我对不同的 suntax 以及向下/向上采样方法感到困惑。我们如何只为保留输入和输出大小的一层做到这一点?

- 通过使用tf.nn.atrous_conv2d然后tf.nn.atrous_conv2d_transpose

- 通过使用 tf.nn.conv2d 然后tf.nn.conv2d_transpose

提前致谢

4

2 回答 2

1

我以前没有使用过膨胀,但我使用基于卷积的自动编码器。这是一个采用 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
于 2018-09-24T16:10:28.027 回答
0

我做了如下的事情。似乎矩阵的大小是合理的。这是对的吗?

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)

于 2018-04-20T17:02:27.047 回答