0

ニューラルネットワークを使って画像を生成するための「デコンボリューション」(すなわち転置畳み込み)方法ではなく、「サイズ変更畳み込み」の使用についてこの記事を読んでいます。ストライドサイズが1の場合の動作ははっきりしていますが、ストライドサイズ> 1の場合はどのように実装しますか?サイズを1にすることはできますか?

これはTensorFlowでこれを実装した方法です。注:これは、自動エンコーダーネットワークのデコーダ部分の2番目の「デコンボリューション」レイヤーです。

h_d_upsample2 = tf.image.resize_images(images=h_d_conv3, 
             size=(int(self.c2_size), int(self.c2_size)), 
             method=tf.image.ResizeMethod.NEAREST_NEIGHBOR) 
h_d_conv2 = tf.layers.conv2d(inputs=h_d_upsample2, 
          filters=FLAGS.C2, 
          kernel_size=(FLAGS.c2_kernel, FLAGS.c2_kernel), 
          padding='same', 
          activation=tf.nn.relu) 

答えて

0

我々はtransposed convolutionを使用する理由は、activation mapsの解像度を高めることです。これをconv2d with strideに置き換える場合は、出力解像度を上げることを目的としている場合は解像度を下げます。

stridesを使用できますが、希望の解像度に達するには、より大きなリスケーリング係数を適用する必要があります。

0

イメージのサイズを変更することは、ネットワークの中間層のための実行可能なオプションではありません。試してみてくださいconv2d_transpose

どのようにストライドサイズ> 1に実装しますか?

# best practice is to use the transposed_conv2d function, this function works with stride >1 . 
# output_shape_width_height = stride * input_shape_width_height 
# input_shape = [32, 32, 48], output_shape = [64, 64, 128] 
stride = 2 
filter_size_w =filter_size_h= 2 
shape = [filter_size_w, filter_size_h, output_shape[-1], input_shape[-1]] 
w = tf.get_variable(
    name='W', 
    shape=shape, 
    initializer=tf.contrib.layers.variance_scalling_initializer(), 
    trainable=trainable) 

output = tf.nn.conv2d_transpose(
     input, w, output_shape=output_shape, strides=[1, stride, stride, 1]) 
関連する問題