【问题标题】:How to increase the size of deconv2d filters for a fixed data size?如何为固定数据大小增加 deconv2d 过滤器的大小?
【发布时间】:2017-11-02 19:42:32
【问题描述】:

我正在尝试调整此DCGAN code 以便能够处理 2x80 数据样本。

所有generator层都是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 52 x 102 x 202 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 代码为 in this repository,在设置 DCGAN-tensorflow as in the instructions 后,您必须将 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

【问题讨论】:

  • 您需要共享您的输入示例数据以及您从原始链接示例中修改的代码。简单的描述是不够的 масяня ))) 还需要使用局部变量进行完整的回溯,例如ipython.readthedocs.io/en/stable/interactive/…github.com/skorokithakis/tbvaccine
  • 您有可以分享的最小可复制示例吗?
  • 示例输入数据、代码和错误回溯已按要求在问题的编辑中提供,如果还有其他帮助,请告诉我。
  • 这可能与您在这里乘以 1 的事实有关。 h3, self.h3_w, self.h3_b = deconv2d( h2, [self.batch_size, s_h2, s_w2, self.gf_dim*1], name='g_h3', with_w=True) 而不是 2。

标签: python tensorflow conv-neural-network deconvolution dcgan


【解决方案1】:

在您的 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) 形状产生。 (因为你只有 2 个值)

另外,您可能会考虑将 k_h=5 更改为 k_h=2,因为当您只有 2 个元素时,在高度上采用 5 个元素并没有多大意义。

【讨论】:

  • 非常感谢 - 它也开始为我训练。
猜你喜欢
  • 2020-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2016-06-17
  • 2015-02-15
  • 2016-04-23
  • 2011-04-07
相关资源
最近更新 更多