【问题标题】:generative adversarial network generating image with some random pixels生成对抗网络生成具有一些随机像素的图像
【发布时间】:2018-04-09 00:00:48
【问题描述】:

我正在尝试在 CelebA 对齐数据集上使用生成对抗网络 (GAN) 生成图像,并将每个图像的大小调整为 .jpeg 格式的 64*64。我的网络定义是这样的

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)

通过生成器生成的图像,我得到了一些随机颜色的像素以及其中的“网格”结构,如示例图像所示:

我的问题是这两个问题的原因是什么,我也使用了几乎相同的架构,在 Cifar-10 数据集的生成器和鉴别器中少了一个卷积层,具有 .png 格式的 32*32 分辨率图像,但是有生成的图像不是这样的。不确定图像格式是否是原因。如果有人能提供一些想法、方法或链接,以及任何摆脱此类问题的方法,我将不胜感激。

【问题讨论】:

  • 提供你目前尝试过的代码
  • 很遗憾,我不能分享整个代码,但是我已经提到了生成器和鉴别器结构。谢谢!
  • 你能分享一下可视化输出的代码吗?可能存在饱和误差。

标签: machine-learning conv-neural-network deconvolution image-generation


【解决方案1】:

出现这些问题的原因是:-

  1. 随机像素-图像数据的归一化必须按照Generator最后一层的激活函数[-1,1] -> tanh

  2. 生成图像中的“网格”- 每个图像的尺寸改变的方式。所以应该使用'transpose'函数而不是'reshape'来转换(64,64,3)->(3,64,64)

【讨论】:

    猜你喜欢
    • 2019-05-22
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    相关资源
    最近更新 更多