问题标签 [dcgan]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1519 浏览

tensorflow - TensorFlow MNIST DCGAN:如何设置损失函数?

我想自己在 TensorFlow 中为 MNIST 构建一个DCGAN。但是,我正在努力找出应该如何为生成器设置损失函数。在Keras DCGAN 实现中,作者针对这个问题使用了一些“解决方法”:他只是构建了 3 个模型。生成器 (G)、判别器 (D) 和第三个,他只是将 G 与 D 组合在一起,同时将 D 的训练能力设置为 false。

这样,他可以用真实图像 + 生成的图像来训练 D 并训练 G+D 组合模型,因为 D 的损失会传播到 G,因为 D 在 G+D 组合模型中是不可训练的。

在 TensorFlow 中,我已经构建了 G 和 D。训练 D 相对简单,因为我只需要将一批真实的 MNIST 训练图像与生成的图像结合起来,然后调用训练操作:

本例中的训练操作是二元交叉熵

...但是当我没有“堆叠”模型时,我将如何为 G 设置损失函数,将“G 和 D”结合到单个第三模型?

我知道我必须用 G 生成一批图像,将它们输入 D,然后我可以获得 D 的损失......但是,G 的输出是 shape (batch_size, 28, 28, 1)。我将如何手动为 G 设置损失函数?

如果没有“G 和 D”组合模型“解决方法”,我必须将 D 的损失传播到(batch_size, 1)G 的输出层。

例如,如果 G 会做一些分类,这并不难弄清楚……但 G 会输出图像。因此,我不能直接将 D 的损失映射到 G 的输出层。

我必须建立第三个结合 G+D 的模型吗?或者有没有办法手动计算 G 的损失?

非常感谢任何帮助:)

0 投票
1 回答
309 浏览

cntk - CNTK ImageDeserializer 和 DCGAN 示例

我正在修改此示例 https://github.com/Microsoft/CNTK/blob/master/Tutorials/CNTK_206B_DCGAN.ipynb以使用 png MNIST 文件(而不是教程使用的平面一维数组图像输入)。我使用 ImageDeserializer (和映射文件来加载数据):

我将输入输出更改为鉴别器以期望 28x28 图像(和生成器的输出)。在这里查看代码:https ://github.com/olgaliak/cntk-cyclegan/blob/master/trainDCGan.py

问题是 trainDCGan.py 现在正在产生噪音。感谢你的帮助!

0 投票
1 回答
278 浏览

python - 如何为固定数据大小增加 deconv2d 过滤器的大小?

我正在尝试调整此DCGAN 代码以使其能够处理 2x80 数据样本。

所有生成器层都不是tf.nn.deconv2dh0,即 ReLu。每个级别的生成器过滤器大小当前为:

由于我的数据的性质,我希望它们最初生成为 2 x ...,即过滤器为2 x 52 x 102 x 202 x 402 x 80。但是,当我只是手动输入s_h16 = 2 * s_h16等等时s_h2 = 2 * s_h2,我遇到了以下错误:

所以我知道错误发生在 h3 级别,但我无法完全追踪它(这里是 64 是批量大小)。有什么想法可以解决这个问题吗?


编辑:编辑的 DCGANs 代码在此存储库中,在按照说明设置 DCGAN-tensorflow 后,您必须将 Data_npy 文件夹放入DCGAN-tensorflow/data文件夹中。

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

完整的错误回溯如下所示:

0 投票
0 回答
732 浏览

python - GAN 生成器没有产生预期的结果

我对 tensorflow 有点陌生,所以如果问题很明显,请原谅我。基本上,我正在制作一个生成对抗网络,而我的生成器会产生非常重复的瓦片状模式。目前我的发电机模型看起来像这样

其中密集块由以下组成:

deconv 块如下所示:

权重和偏差创建如下:

损失函数和优化器是:

我正在训练图“G”中的所有参数,定义如下:

这似乎确实返回了正确数量的变量。网络被输入一个大小为 (batch_size, 100) 的张量,它应该开始类似于一些放大的 mnist 数据(缩放到 64x64)。我从错误中注意到的是,生成器仅在几个时期的损失方面有所改善,然后是平坦的。即使判别器仅每 50 个 epoch 更新一次,生成器在大约 150 个 epoch 后也没有改进

示例输出如下所示: Epoch 500

我还想指出,鉴别器确实可以正常工作。我开始将鉴别器作为 mnist 的分类 CNN,然后我基本上将所有输出合并到一个节点中,以便与 GAN 一起使用。

其他输出也遵循类似的平铺模式,我不知道为什么。如果有人可以提供帮助,那就太好了!如果您需要更多信息,请告诉我。

0 投票
2 回答
11190 浏览

python - DCGANs:鉴别器变得太强太快以至于无法让生成器学习

我正在尝试将这个版本的 DCGAN 代码(在 Tensorflow 中实现)与我的一些数据一起使用。我遇到了鉴别器变得太强大的问题,太快了,以至于生成器无法学习任何东西。

现在有一些针对 GAN 的问题通常推荐的技巧:

  • 批量标准化(DCGANs 代码中已经存在)

  • 给发电机一个先机。

我做了后者的某个版本,允许每 1 个鉴别器进行 10 次生成器迭代(不仅仅是在开始时,而是在整个训练过程中),这就是它的外观: 生成器和判别器的损失函数

在这种情况下,添加更多的生成器迭代只会有助于减缓不可避免的 - 鉴别器变得太强并抑制生成器学习。

因此,我想就是否有另一种方法可以帮助解决过强的鉴别器问题征求意见?

0 投票
0 回答
427 浏览

python - 为什么具有非卷积鉴别器的 DCGAN 不学习?

我调整了DCGAN-Tensorflow 代码,将其鉴别器架构更改为非卷积网络。这使得判别器和生成器的损失从学习一开始就并行,就像这样: 在此处输入图像描述 两个损失的数量不是恒定的,它们确实会反弹,但非常轻微。生成的输出一点都不好——模型似乎没有学习。

问:有没有人遇到过这样的事情?可能是什么问题?


完整的 git 存储库可在此处获得。

这是已编辑的鉴别器的代码,它破坏了代码:

而不是原来的:

0 投票
1 回答
413 浏览

python - Backpropagation without updating weights (DCGAN)

The basic idea is, that I load a trained model (DCGAN) and make a anomaly detection with it on images. For the anomaly detection I have to do some iterations on the test phase to evaluate it, if it is a anomaly or not.

For that I have two Loss-Functions in the test setup, which should be calculating a backpropagation to the generator input and update the latent vector. But it only should update the latent vector, not the weights on the graph.

Is this possible?

Probably, if I use only a pytorch-variable of my latent vector and set the variable output of the generator to "requires_grad=False" Like in the docs --> Pytorch

0 投票
1 回答
449 浏览

python - 在 GAN 中使用经过训练的鉴别器来计算概率

我按照这个关于 GAN 的教程 - https://github.com/adeshpande3/Generative-Adversarial-Networks/blob/master/Generative%20Adversarial%20Networks%20Tutorial.ipynb

我想使用经过训练的鉴别器来计算测试图像的概率(我对代表某个集合的图像进行了训练,并想检查测试图像与该集合相似的概率。)我使用了以下代码 - (重新加载模型后)

但它没有给出概率,一些随机浮点数>1。如何使用训练有素的判别器来寻找概率?

0 投票
1 回答
339 浏览

machine-learning - GAN 改变输入大小会导致错误

下面的代码只需要 32*32 的输入,我想输入 128*128 的图像,如何去做。代码来自教程 - https://github.com/awjuliani/TF-Tutorials/blob/master/DCGAN.ipynb

定义生成器(z):

def鉴别器(底部,重用=假):

以下是我输入 128*128 图像时出现的错误。

0 投票
1 回答
158 浏览

python - 更改在 Tensorflow 中定义的 DCGAN 损失函数

我想在DCGAN-tensorflow model.py(代码行 127-133)中为生成器损失函数添加另一个术语。像这样:

问题是这段代码中的所有损失函数都定义为张量流张量(占位符),这使得对矩阵行/列的操作变得困难(就像在 numpy 中一样)。将这些转换为 numpy 也不是一种选择,因为还没有任何数据馈送到 tensorflow 占位符。

这是我想对 tensorflow 占位符张量执行的操作的 numpy 示例:

这个函数的工作张量流模拟是什么?

或者,任何其他允许我将这样的术语添加到 DCGAN tensorflow 生成器损失函数的解决方案将不胜感激。


PS上述更改导致的确切错误如下所示(总而言之,占位符没有要评估的数据):