繁体   English   中英

如何针对固定数据大小增加deconv2d过滤器的大小?

[英]How to increase the size of deconv2d filters for a fixed data size?

我正在尝试调整此DCGAN代码 ,以便能够使用2x80数据样本。

所有生成器层都是tf.nn.deconv2d而不是h0,即ReLu。 目前每级的生成器过滤器大小:

Generator: h0: s_h16 x s_w16: 1  x  5
Generator: h1: s_h8 x s_w8: 1  x  10
Generator: h2: s_h4 x s_w4: 1  x  20
Generator: h3: s_h2 x s_w2: 1  x  40
Generator: h4: s_h x s_w: 2  x  80

由于我的数据的性质,我希望它们最初生成为2 x ...,即滤波器为2 x 5 2 x 10 2 x 20 2 x 402 x 80 但是,当我只手动输入s_h16 = 2 * s_h16 ,依此类推到s_h2 = 2 * s_h2 ,我遇到以下错误:

ValueError: Shapes (64, 1, 40, 64) and (64, 2, 40, 64) are not compatible

所以我知道错误发生在h3级别,但是我无法完全跟踪它(64这里是批量大小)。 任何想法如何解决这个问题?


编辑:编辑DCGANs代码是在这个仓库中,DCGAN-tensorflow上设定好后, 以指令中 ,你不得不Data_npy文件夹放到DCGAN-tensorflow/data文件夹中。

然后运行python main.py --dataset Data_npy --input_height=2 --output_height=2 --train将为您提供我得到的错误。

完整错误回溯如下所示:

Traceback (most recent call last):
  File "/home/marija/.local/lib/python3.5/site-packages/tensorflow/python/framework/tensor_shape.py", line 560, in merge_with
    new_dims.append(dim.merge_with(other[i]))
  File "/home/marija/.local/lib/python3.5/site-packages/tensorflow/python/framework/tensor_shape.py", line 135, in merge_with
    self.assert_is_compatible_with(other)
  File "/home/marija/.local/lib/python3.5/site-packages/tensorflow/python/framework/tensor_shape.py", line 108, in assert_is_compatible_with
    % (self, other))
ValueError: Dimensions 1 and 2 are not compatible

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "main.py", line 97, in <module>
    tf.app.run()
  File "/home/marija/.local/lib/python3.5/site-packages/tensorflow/python/platform/app.py", line 48, in run
    _sys.exit(main(_sys.argv[:1] + flags_passthrough))
  File "main.py", line 80, in main
    dcgan.train(FLAGS)
  File "/home/marija/DCGAN-tensorflow/model.py", line 180, in train
    .minimize(self.g_loss, var_list=self.g_vars)
  File "/home/marija/.local/lib/python3.5/site-packages/tensorflow/python/training/optimizer.py", line 315, in minimize
    grad_loss=grad_loss)
  File "/home/marija/.local/lib/python3.5/site-packages/tensorflow/python/training/optimizer.py", line 386, in compute_gradients
    colocate_gradients_with_ops=colocate_gradients_with_ops)
  File "/home/marija/.local/lib/python3.5/site-packages/tensorflow/python/ops/gradients_impl.py", line 580, in gradients
    in_grad.set_shape(t_in.get_shape())
  File "/home/marija/.local/lib/python3.5/site-packages/tensorflow/python/framework/ops.py", line 413, in set_shape
    self._shape = self._shape.merge_with(shape)
  File "/home/marija/.local/lib/python3.5/site-packages/tensorflow/python/framework/tensor_shape.py", line 564, in merge_with
    (self, other))
ValueError: Shapes (64, 1, 40, 64) and (64, 2, 40, 64) are not compatible

在您的ops.py文件中

您的问题来自deconv过滤器中的跨步大小,将conv2ddeconv2d的标头修改为:

def conv2d(input_, output_dim, 
       k_h=5, k_w=5, d_h=1, d_w=2, stddev=0.02,
       name="conv2d"):

def deconv2d(input_, output_shape,
       k_h=5, k_w=5, d_h=1, d_w=2, stddev=0.02,
       name="deconv2d", with_w=False):

像这样,它开始为我训练。 我没有检查输出。

问题在于考虑输入的形状,在高度上移动2(d_h的原始值)将在反向传播期间由(64, 1, 40, 64) 64,1,40,64 (64, 1, 40, 64)形状产生。 (因为你只有2个值)

你也可以考虑将k_h=5更改为k_h=2因为当你只有2个没有那么多意义时,将5个元素放在高度上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM