有关GAN与DeepSteg的训练过程的异同
GAN的训练
以DCGAN为例,生成对抗神经网络在训练的时候分为两步
- 辨别器的训练:辨别器输入的数据为生成器的数据与真实的数据,其拟合的目标是将生成器生成的数据判断为0,真实的图片判断为1,所以直接训练一个二分类器就行了。
- 生成器的训练:在DCGAN中生成器的输入一般为noise。生成器的目标是为了骗过辨别器,即其拟合的目标是辨别器将其生成的数据全部判断为1(真实的图片),所以生成器训练的损失为:
###D is Discriminator, G is generator
binary_crossentropy(D(G(noise)), [1] * Batch_size)
在生成器的训练中由于需要使用辨别器的输出构成生成器的损失函数,所以生成器在训练的时候辨别器的weight是不会进行更新的。具体可以这样使用
d = discriminator_model()
g = generator_model()
combined = Sequential()
combined.add(g)
combined.add(d)
d.compile()
d.trainable = False
combined.compile()
有关DeepSteg的训练
deepsteg 选用keras functional api来实现网络结构。keras functional api更加适合DeepSteg多输出的网络结构。
其首先compile了编码器,使得编码器会对编码器的结果进行参数的更新