infogan 生成mnist 手写数字

本文介绍了InfoGAN在生成MNIST手写数字上的应用。InfoGAN是一种信息最大化的变种GAN,通过增加隐含信息来提高生成图像的质量。实验中发现,使用ReLU而非LeakyReLU作为激活函数对生成器效果更好。文章详细讨论了网络结构、损失函数以及训练技巧,并提供了完整的代码实现。
摘要由CSDN通过智能技术生成

原文链接: infogan 生成mnist 手写数字

上一篇: teamviewer 远程操控

下一篇: ros 发布订阅模型 自定义消息

InfoGAN介绍

尝试加深生成器网络结构以便于生成更加逼真的信息,结果效果反而很差

生成器中使用relu比leaky_relu效果也好,不知道为什么。。。。

判别器加深后效果也不怎么好,貌似这个结构是 经过多次试验之后才确定的,修改反而效果很差

效果

71c2733eec57dfa80673c7984b904334945.jpg

由于其中采用了bn层,所以如果只对一张图片进行可视化操作会出现下面的问题,但是多张图片就没有 问题

4bd603dfa39fb010632e73b61ffc2d43ae0.jpg

不同的激活函数和网络结构训练得到的结果也不一样

9fcca1a9efb70815e1debe6f82d33e109d3.jpg

输入,z表示噪声,由两部分组成,一部分蕴含信息,一部分是随机噪声

    x = tf.placeholder(tf.float32, [None, n_input])
    in_y = tf.placeholder(tf.int32, [None])
    z_con = tf.placeholder(tf.float32, (None, con_dim))
    z_rand = tf.placeholder(tf.float32, (None, rand_dim))
    z = tf.concat(
        [tf.one_hot(in_y, n_class), z_con, z_rand], axis=1
    )
    print('z ', z.shape)  # z  (?, 50)

生成器和判别器

生成器输入数据,n*(2+38+10) 输出 n*28*28*1

判别器输入图片返回三个结果

1,真实图片概率 0---1.0

2,分类信息n*10

3,隐含信息n*2

def generator(x):
    reuse = len([t for t in tf.global_variables() if t.name.startswith('generator')]) > 0
    with tf.variable_scope('generator', reuse=reuse):
        x = slim.fully_connected(x, 1024)
        x = slim.batch_norm(x, activation_fn=tf.nn.relu)
        x = slim.fully_connected(x, 7 * 7 * 128)
        x = slim.batch_norm(x, activation_fn=tf.nn.relu)
        x = tf.reshape(x, [-1, 7, 7, 128])
        x = slim.conv2d_transpose(x, 64, kernel_size=[4, 4], stride=2, activation_fn=tf.nn.relu)
        x = slim.batch_norm(x, activation_fn=tf.nn.relu)
        x = slim.conv2d_transpose(x, 1, kernel_size=[4, 4], stride=2, activation_fn=tf.nn.sigmoid)
        print('x ', x.shape)  # x  (?, 28, 28, 1)
    return x

def discriminator(x):
    reuse = len([t for t in tf.global_variables() if t.name.startswith('discriminator')]) > 0
    with tf.variable_scope('discriminator', reuse=reuse):
        x = tf.reshape(x, shape=[-1, 28, 28, 1])
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值