我在云端训练 GAN 已经有一段时间了。我使用谷歌的免费信用。我的带有 CPU 的笔记本电脑似乎无法胜任这项任务。
即使时代的数量约为 15000,我也没有得到任何接近原始的东西。
这是主要代码。我并没有声称完全理解深层。写这段代码也花了几天时间。其余代码是训练的样板。
没有编译错误,我使用 TensorBoard 查看图像。
生成器的输出是 (1024,1024) 图像。这应该与我的原始图像相同,即 (299,299) 图像。
我应该使用公式计算每层如何转换图像以更好地理解它吗?
我该如何解决 ?我混合和匹配 API 只是为了创建一个工作示例,假设不会产生任何问题。
X = tf.placeholder(tf.float32, shape=[None, 299, 299, 1], name='X')
Z = tf.placeholder(dtype=tf.float32,
shape=(None, 100),
name='Z')
is_training = tf.placeholder(dtype=tf.bool,name='is_training')
keep_prob = tf.placeholder(dtype=tf.float32, name='keep_prob')
keep_prob_value = 0.6
def generator(z,reuse=False, keep_prob=keep_prob_value,is_training=is_training):
with tf.variable_scope('generator',reuse=reuse):
linear = tf.layers.dense(z, 1024 * 8 * 8)
linear = tf.contrib.layers.batch_norm(linear, is_training=is_training,decay=0.88)
conv = tf.reshape(linear, (-1, 128, 128, 8))
out = tf.layers.conv2d_transpose(conv, 64,kernel_size=4,strides=2, padding='SAME')
out = tf.layers.dropout(out, keep_prob)
out = tf.contrib.layers.batch_norm(out, is_training=is_training,decay=0.88)
out = tf.nn.leaky_relu(out)
out = tf.layers.conv2d_transpose(out, 32,kernel_size=4,strides=2, padding='SAME')
out = tf.layers.dropout(out, keep_prob)
out = tf.contrib.layers.batch_norm(out, is_training=is_training,decay=0.88)
out = tf.layers.conv2d_transpose(out, 1,kernel_size=4,strides=2, padding='SAME')
out = tf.layers.dropout(out, keep_prob)
out = tf.contrib.layers.batch_norm(out, is_training=is_training,decay=0.88)
print( out.get_shape())
out = tf.nn.leaky_relu(out)
tf.nn.tanh(out)
return out
def discriminator(x,reuse=False, keep_prob=keep_prob_value):
with tf.variable_scope('discriminator',reuse=reuse):
out = tf.layers.conv2d(x, filters=32, kernel_size=[3, 3], padding='SAME')
out = tf.layers.dropout(out, keep_prob)
out = tf.nn.leaky_relu(out)
out = tf.layers.max_pooling2d(out, pool_size=[2, 2],padding='SAME', strides=2)
out = tf.layers.conv2d(out, filters=64, kernel_size=[3, 3], padding='SAME')
out = tf.layers.dropout(out, keep_prob)
out = tf.nn.leaky_relu(out)
out = tf.layers.max_pooling2d(out, pool_size=[2, 2],padding='SAME', strides=2)
out = tf.layers.dense(out, units=256, activation=tf.nn.leaky_relu)
out = tf.layers.dense(out, units=1, activation=tf.nn.sigmoid)
return out
GeneratedImage = generator(Z)
DxL = discriminator(X)
DgL = discriminator(GeneratedImage, reuse=True)
