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

时间:2017-06-01 15:09:50

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

我正在尝试调整此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 20,{{ 1}}和2 x 40。但是,当我手动输入2 x 80以后依此类推s_h16 = 2 * s_h16时,我会遇到以下错误:

s_h2 = 2 * s_h2

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

修改:已编辑的DCGAN代码为in this repository,在设置了DCGAN-tensorflow as in the instructions之后,您必须将Data_npy文件夹放入{{} 1}}文件夹。

然后运行ValueError: Shapes (64, 1, 40, 64) and (64, 2, 40, 64) are not compatible 将为您提供我得到的错误。

完整错误回溯如下所示:

DCGAN-tensorflow/data

1 个答案:

答案 0 :(得分:2)

在您的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}元素放在高度上是非常有意义的。