有關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了編碼器,使得編碼器會對編碼器的結果進行參數的更新