ジェネレーティブモデルクラシックネットワークのDCGANの分析

元のGANモデルでは、ジェネレーターとディスクリミネーターの両方が浅いモデルです。より高解像度の画像を生成するには、より深いモデルが必要です。IndicoのAlecRadford et al。は、2016年にDCGAN(Deep Convolutional GAN)モデルを提案しました。このモデルのディスクリミネーターとジェネレーターはどちらも、完全に畳み込みのニューラルネットワークを使用しています。弁別器の最後の層と生成器の最初の層を除いて、他のすべての層は畳み込み層を使用します。このモデルは、GANの大規模画像生成能力を向上させます。LSUN(大規模販売シーン理解)データセットでトレーニングした後
、他の以前のGANモデルを超える64×64のサイズのリアルな画像を生成できます。

def discriminator(self, image, reuse=False):
    if reuse:
        tf.get_variable_scope().reuse_variables()

    h0 = lrelu(conv2d(image, self.df_dim, name='d_h0_conv'))
    h1 = lrelu(self.d_bn1(conv2d(h0, self.df_dim*2, name='d_h1_conv')))
    h2 = lrelu(self.d_bn2(conv2d(h1, self.df_dim*4, name='d_h2_conv')))
    h3 = lrelu(self.d_bn3(conv2d(h2, self.df_dim*8, name='d_h3_conv')))
    h4 = linear(tf.reshape(h3, [-1, 8192]), 1, 'd_h3_lin')

    return tf.nn.sigmoid(h4), h4


def generator(self, z):
    self.z_, self.h0_w, self.h0_b = linear(z,self.gf_dim*8*4*4,'g_h0_lin', with_w=True)
    self.h0 = tf.reshape(self.z_, [-1, 4, 4, self.gf_dim * 8])
    h0 = tf.nn.relu(self.g_bn0(self.h0))

    self.h1, self.h1_w, self.h1_b = conv2d_transpose(h0,[self.batch_size, 8, 8, self.gf_dim*4], name='g_h1', with_w=True)
    h1 = tf.nn.relu(self.g_bn1(self.h1))
    h2, self.h2_w, self.h2_b = conv2d_transpose(h1,[self.batch_size, 16, 16, self.gf_dim*2], name='g_h2', with_w=True)
    h2 = tf.nn.relu(self.g_bn2(h2))
    h3, self.h3_w, self.h3_b = conv2d_transpose(h2,[self.batch_size, 32, 32, self.gf_dim*1], name='g_h3', with_w=True)
    h3 = tf.nn.relu(self.g_bn3(h3))
    h4, self.h4_w, self.h4_b = conv2d_transpose(h3,[self.batch_size, 64, 64, 3], name='g_h4', with_w=True)

    return tf.nn.tanh(h4)


上の図からわかるように、ジェネレーターGは、100次元のノイズベクトルを64 * 64 * 3のマトリックス出力に展開します。プロセス全体で、分数ストライドコンボリューションの方法が採用されています。

self.d_loss_real = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(self.D_logits,tf.ones_like(self.D)))
self.d_loss_fake = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(self.D_logits_,tf.zeros_like(self.D_)))
self.d_loss = self.d_loss_real + self.d_loss_fake

self.g_loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(self.D_logits_,tf.ones_like(self.D_)))

GANの改善と比較して
(1)プーリングレイヤーの代わりにコンボリューションとデコンボリューションを使用します
(2)ジェネレーターと
ディスクリミネーターの両方にバッチ正規化操作を追加します(3)GANの完全に接続されたレイヤーを削除します。グローバルプーリングレイヤーが置き換えられます
(4)ジェネレーターの出力レイヤーはTanhアクティベーション機能を使用し、他のレイヤーはRELUを使用します
(5)ディスクリミネーターのすべてのレイヤーはLeakyReLUアクティベーション機能を使用します

http://bamos.github.io/2016/08/09/deep-completion/

おすすめ

転載: blog.csdn.net/weixin_38052918/article/details/107917695