我正在尝试调整此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 5
,2 x 10
,2 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
答案 0 :(得分:2)
在您的ops.py文件中
您的问题来自deconv过滤器中的跨步大小,将conv2d
和deconv2d
的标头修改为:
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}元素放在高度上是非常有意义的。