与InfoGAN合作总是很愉快,因为它可以无人值守地解码数据结构。离散潜伏对我来说非常好,可以对不同的轨迹进行分类。然而,最近我一直有点沮丧,因为我正在尝试实现连续的潜在代码。
我首先尝试原始InfoGAN论文给出的mnist示例,并且它工作正常,因为第一个连续潜在代码表示倾斜角度,第二个连续潜在代表宽度。然而,当我在我自己的玩具数据集上尝试它时(类似于 first,second)没有任何结果。我希望看到我的输出有连续的变化,但它们完全是随机的,就像潜在的代码根本不起作用。
我使用卷积和反卷积网络来区分和生成样本,并按照与原始OPENAI实现中相同的方式处理离散潜在代码。我对连续潜码的处理有点不同,我将连续潜码分布直接建模为均匀分布(而不是OPENAI实现中的高斯分布),并使用MSE测量其与输入码的距离。
loss_c_cont = tf.reduce_mean(tf.reduce_sum(tf.square(c_cont_fake - c_cont), 1))
我想了一段时间,但不要认为它会造成巨大差异,因为高斯分布距离也主要考虑epsilon =(x_var - mean)的平方。
return tf.reduce_sum(
- 0.5 * np.log(2 * np.pi) - tf.log(stddev + TINY) - 0.5 * tf.square(epsilon),
reduction_indices=1,
)
我不知道我是否真的注意到了OPENAI实现中的所有细微技巧。但我只是想知道是否有人对InfoGAN中的连续潜在代码实现有一些经验,甚至只是一般的InfoGAN培训。
我真的很欢迎你的所有想法!