问题标签 [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.
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 的损失?
非常感谢任何帮助:)
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 现在正在产生噪音。感谢你的帮助!
python - 如何为固定数据大小增加 deconv2d 过滤器的大小?
我正在尝试调整此DCGAN 代码以使其能够处理 2x80 数据样本。
所有生成器层都不是tf.nn.deconv2d
h0,即 ReLu。每个级别的生成器过滤器大小当前为:
由于我的数据的性质,我希望它们最初生成为 2 x ...,即过滤器为2 x 5
、2 x 10
、2 x 20
、2 x 40
和2 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
将为您提供我得到的错误。
完整的错误回溯如下所示:
python - GAN 生成器没有产生预期的结果
我对 tensorflow 有点陌生,所以如果问题很明显,请原谅我。基本上,我正在制作一个生成对抗网络,而我的生成器会产生非常重复的瓦片状模式。目前我的发电机模型看起来像这样
其中密集块由以下组成:
deconv 块如下所示:
权重和偏差创建如下:
损失函数和优化器是:
我正在训练图“G”中的所有参数,定义如下:
这似乎确实返回了正确数量的变量。网络被输入一个大小为 (batch_size, 100) 的张量,它应该开始类似于一些放大的 mnist 数据(缩放到 64x64)。我从错误中注意到的是,生成器仅在几个时期的损失方面有所改善,然后是平坦的。即使判别器仅每 50 个 epoch 更新一次,生成器在大约 150 个 epoch 后也没有改进
示例输出如下所示: Epoch 500
我还想指出,鉴别器确实可以正常工作。我开始将鉴别器作为 mnist 的分类 CNN,然后我基本上将所有输出合并到一个节点中,以便与 GAN 一起使用。
其他输出也遵循类似的平铺模式,我不知道为什么。如果有人可以提供帮助,那就太好了!如果您需要更多信息,请告诉我。
python - DCGANs:鉴别器变得太强太快以至于无法让生成器学习
我正在尝试将这个版本的 DCGAN 代码(在 Tensorflow 中实现)与我的一些数据一起使用。我遇到了鉴别器变得太强大的问题,太快了,以至于生成器无法学习任何东西。
现在有一些针对 GAN 的问题通常推荐的技巧:
批量标准化(DCGANs 代码中已经存在)
给发电机一个先机。
我做了后者的某个版本,允许每 1 个鉴别器进行 10 次生成器迭代(不仅仅是在开始时,而是在整个训练过程中),这就是它的外观:
在这种情况下,添加更多的生成器迭代只会有助于减缓不可避免的 - 鉴别器变得太强并抑制生成器学习。
因此,我想就是否有另一种方法可以帮助解决过强的鉴别器问题征求意见?
python - 为什么具有非卷积鉴别器的 DCGAN 不学习?
我调整了DCGAN-Tensorflow 代码,将其鉴别器架构更改为非卷积网络。这使得判别器和生成器的损失从学习一开始就并行,就像这样: 两个损失的数量不是恒定的,它们确实会反弹,但非常轻微。生成的输出一点都不好——模型似乎没有学习。
问:有没有人遇到过这样的事情?可能是什么问题?
完整的 git 存储库可在此处获得。
这是已编辑的鉴别器的代码,它破坏了代码:
而不是原来的:
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
python - 在 GAN 中使用经过训练的鉴别器来计算概率
我按照这个关于 GAN 的教程 - https://github.com/adeshpande3/Generative-Adversarial-Networks/blob/master/Generative%20Adversarial%20Networks%20Tutorial.ipynb
我想使用经过训练的鉴别器来计算测试图像的概率(我对代表某个集合的图像进行了训练,并想检查测试图像与该集合相似的概率。)我使用了以下代码 - (重新加载模型后)
但它没有给出概率,一些随机浮点数>1。如何使用训练有素的判别器来寻找概率?
machine-learning - GAN 改变输入大小会导致错误
下面的代码只需要 32*32 的输入,我想输入 128*128 的图像,如何去做。代码来自教程 - https://github.com/awjuliani/TF-Tutorials/blob/master/DCGAN.ipynb
定义生成器(z):
def鉴别器(底部,重用=假):
以下是我输入 128*128 图像时出现的错误。
python - 更改在 Tensorflow 中定义的 DCGAN 损失函数
我想在DCGAN-tensorflow model.py(代码行 127-133)中为生成器损失函数添加另一个术语。像这样:
问题是这段代码中的所有损失函数都定义为张量流张量(占位符),这使得对矩阵行/列的操作变得困难(就像在 numpy 中一样)。将这些转换为 numpy 也不是一种选择,因为还没有任何数据馈送到 tensorflow 占位符。
这是我想对 tensorflow 占位符张量执行的操作的 numpy 示例:
这个函数的工作张量流模拟是什么?
或者,任何其他允许我将这样的术语添加到 DCGAN tensorflow 生成器损失函数的解决方案将不胜感激。
PS上述更改导致的确切错误如下所示(总而言之,占位符没有要评估的数据):