生成对抗网络生成带有随机像素的图像

我正在尝试使用生成对抗网络(GANs)在CelebA对齐数据集上生成图像,每张图像都被调整为64*64的尺寸并保存为.jpeg格式。我的网络定义如下 GANs architecture

def my_discriminator(input_var= None):    net = lasagne.layers.InputLayer(shape= (None, 3,64,64), input_var = input_var)    net = lasagne.layers.Conv2DLayer(net, 64, filter_size= (6,6 ),stride = 2,pad=2,W = lasagne.init.HeUniform(), nonlinearity= lasagne.nonlinearities.LeakyRectify(0.2))#64*32*32    net = lasagne.layers.Conv2DLayer(net, 128, filter_size= (6,6),stride = 2,pad=2,W = lasagne.init.HeUniform(), nonlinearity= lasagne.nonlinearities.LeakyRectify(0.2))#128*16*16    net = lasagne.layers.Conv2DLayer(net, 256, filter_size= (6,6),stride = 2,pad=2,W = lasagne.init.HeUniform(), nonlinearity= lasagne.nonlinearities.LeakyRectify(0.2))#256*8*8    net = lasagne.layers.Conv2DLayer(net, 512, filter_size= (6,6),stride = 2,pad=2,W = lasagne.init.HeUniform(), nonlinearity= lasagne.nonlinearities.LeakyRectify(0.2))#512*4*4    net = lasagne.layers.DenseLayer(net, 2048, W= lasagne.init.HeUniform(), nonlinearity= lasagne.nonlinearities.LeakyRectify(0.2))    net = lasagne.layers.DenseLayer(net, 1, nonlinearity = lasagne.nonlinearities.sigmoid)def my_generator(input_var=None):    gen_net = lasagne.layers.InputLayer(shape = (None, 100), input_var = input_var)    gen_net = lasagne.layers.DenseLayer(gen_net, 2048, W= lasagne.init.HeUniform())    gen_net = lasagne.layers.DenseLayer(gen_net, 512*4*4, W= lasagne.init.HeUniform())    gen_net = lasagne.layers.ReshapeLayer(gen_net, shape = ([0],512,4,4))    gen_net = lasagne.layers.Deconv2DLayer(gen_net, 256,filter_size= (6,6),stride = 2,crop=2, W= lasagne.init.HeUniform(), nonlinearity= lasagne.nonlinearities.rectify)    gen_net = lasagne.layers.Deconv2DLayer(gen_net, 128,filter_size= (6,6),stride = 2,crop=2, W= lasagne.init.HeUniform(), nonlinearity= lasagne.nonlinearities.rectify)    gen_net = lasagne.layers.Deconv2DLayer(gen_net, 64, filter_size= (6,6), stride=2,crop=2,W= lasagne.init.HeUniform(), nonlinearity= lasagne.nonlinearities.rectify)    gen_net = lasagne.layers.Deconv2DLayer(gen_net, 3, filter_size= (6,6),stride = 2,crop=2, nonlinearity= lasagne.nonlinearities.tanh)

由生成器生成的图像中,我发现了一些随机颜色的像素,并且还出现了类似“网格”的结构,如示例图像所示:enter image description here

我的问题是导致这两个问题的可能原因是什么?我还使用了几乎相同的架构,但在生成器和判别器中少了一个卷积层,在Cifar-10数据集上使用32*32分辨率的.png格式图像,但生成的图像并没有出现这种情况。不确定图像格式是否可能是原因。如果有人能提供一些想法、方法或链接,任何能解决这些问题的建议,我将非常感激。


回答:

这些问题的可能原因是:

  1. 随机像素 – 图像数据的归一化必须与生成器最后一层的激活函数相匹配 [-1,1] -> tanh

  2. 生成图像中的“网格” – 图像尺寸的改变方式。因此,应该使用’transpose’函数而不是’reshape’,以将(64,64,3)转换为(3,64,64)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注