原文链接: infogan 生成mnist 手写数字
上一篇: teamviewer 远程操控
下一篇: ros 发布订阅模型 自定义消息
尝试加深生成器网络结构以便于生成更加逼真的信息,结果效果反而很差
生成器中使用relu比leaky_relu效果也好,不知道为什么。。。。
判别器加深后效果也不怎么好,貌似这个结构是 经过多次试验之后才确定的,修改反而效果很差
效果
由于其中采用了bn层,所以如果只对一张图片进行可视化操作会出现下面的问题,但是多张图片就没有 问题
不同的激活函数和网络结构训练得到的结果也不一样
输入,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])