我对神经网络不是很熟悉,但是,我想我把反向传播的概念理解为从输出层的错误开始。例如,输出层中有3个神经元,它们各自的值最终是:
[1 0.5 0.3]
我们希望获得价值
[0 1 0]
因此,我们可以计算出两者之间的误差向量:
[-1, +0.5, -0.3] (Not necessarily with the - operation, but you get the point)
从那里向后传播。然而,在GAN的发生器中,在我看来,输出层似乎有一堆神经元(代表我们想要生成的实体的大小),但是误差仅基于鉴别器错误分类的图像的百分比。那么我们该怎么做发电机的后置支撑呢?
我发现GAN的唯一一个人
我正在构建一个GAN来检测图像中的异常。我在keras上构建了我的模型,因为我只熟悉keras。生成器和鉴别器都是自动编码器,我定义了自己的损失函数。该模型的概念是这样的:该模型仅在正常图像上进行训练,并在正常图像和异常图像上进行测试,由于该模型在训练期间仅看到正常图像,因此它不能像正常图像一样重建出良好的异常图像,因此可以使用较大的重建误差作为异常的指示。使用2个自动编码器的原因是,第二个重建图像将具有比原始输入更大的距离,因此它可以更好地分离异常图像。
我不知道哪里出了问题,但无论我训练多少批,模型都不会收敛。我尝试构建只有一个输出的鉴别器和gan,但它没有改善结果。
# Build mo
因此,我有一堆假的(模糊的)图像,我试图“纠正”,让它们看起来与真实的(而不是模糊的)图像难以区分。我有很多批次,我不知道当涉及到keras中的GANs时,您会如何进行交叉验证。 对于一个简单的神经网络,它是难以置信的简单,如文档中所示: model.fit(X, Y, validation_split=0.33, epochs=15, batch_size=100) 然而,我正在尝试为GAN做这件事,GAN似乎没有一个简单的方法…… 下面是我当前代码的一部分(这更像是伪代码),我想对其应用交叉验证: for batch in batches:
# generate images
i
为什么带有int32和float32的图像的输出会不同,尽管它们的值看起来很相似? for x in dataset:
plt.axis("off")
plt.imshow((x.numpy()*255).astype("int32")[0])
break 和 for x in dataset:
plt.axis("off")
plt.imshow((x.numpy()*255).astype("float32")[0])
break 在float32的情况下,白色的影响变得很大。