【发布时间】:2019-12-01 17:49:15
【问题描述】:
我有 GAN 网络,可以生成剑的 3d 模型。我基于 Tensorflow GAN 生成数字图像教程:https://www.tensorflow.org/tutorials/generative/dcgan 构建它。
我正在将 .obj 文件(所有模型都有 240 个面)转换为 mat [240;9](其中 9 是面顶点的坐标)。
所有坐标
我混合了我的 3d 模型矩阵并开始学习我的 GAN 网络。每 100 个 epoch 我打印判别器预测的平均值:用于学习的数据集、用于检查判别器的未使用模型的数据集、生成的模型和垃圾(随机生成的矩阵 [240,9])
激活的判别器函数是线性的:如果结果是> 0 => 判别器接受模型,如果是
但我得到的结果是:
> 1-th epoch:
> Learned Dataset AVG Prediction: ~ 0.002
> Unused Checking Dataset AVG Prediction ~ 0.0018
> Generated Dataset AVG Prediction ~ -0.002
> Garbage Dataset AVG Prediction ~ -1.5
>
> 6000-th epoch:
> Learned Dataset AVG Prediction: ~ 17.000
> Unused Checking Dataset AVG Prediction ~ 19.000
> Generated Dataset AVG Prediction ~ -3.000
> Garbage Dataset AVG Prediction ~ -20000.000
这意味着判别器学习正确,但生成器无法欺骗判别器。我得到了像剑一样的 3D 模型,但是多边形随机旋转并且没有连接:https://imgur.com/FGOVDTT (100.000 epoch)
我的数据集是好的,判别器学习正确吗? 我应该改变发电机模型网络的结构吗? 进行此类培训的原因可能是什么?
def make_generator_model():
model = tf.keras.Sequential()
model.add(layers.Dense(30 * 9 * 512, use_bias=False, input_shape=(100,)))
model.add(layers.BatchNormalization())
model.add(layers.LeakyReLU())
model.add(layers.Reshape((30, 9, 512)))
assert model.output_shape == (None, 30, 9, 512) # Note: None is the batch size
model.add(layers.Conv2DTranspose(128, (5, 5), strides=(2, 1), padding='same', use_bias=False))
assert model.output_shape == (None, 60, 9, 128)
model.add(layers.BatchNormalization())
model.add(layers.LeakyReLU())
model.add(layers.Conv2DTranspose(64, (5, 5), strides=(2, 1), padding='same', use_bias=False))
assert model.output_shape == (None, 120, 9, 64)
model.add(layers.BatchNormalization())
model.add(layers.LeakyReLU())
model.add(layers.Conv2DTranspose(1, (5, 5), strides=(2, 1), padding='same', use_bias=False, activation='tanh'))
assert model.output_shape == (None, 240, 9, 1)
return model
我的程序中的所有其他代码都与 TensorFlow 站点中的代码相同
【问题讨论】:
标签: python tensorflow machine-learning generator discriminator