几个DCGAN的keras实现对比(一)——《GAN:实战生成对抗网络》中的DCGAN

本文对比了《GAN:实战生成对抗网络》中DCGAN的实现,发现生成的图像效果一般,多样性不足,且在30个epoch后继续训练并未显著提升效果。同时,判别器和生成器的loss表现不理想,生成器的loss甚至升高,表明模型可能未学到良好分布。在另一汉字书法字体数据集上,仅5个epoch就出现模型坍塌问题,验证了之前的实验观察。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.《GAN:实战生成对抗网络》中的DCGAN,参考代码链接为https://github.com/jacobgil/keras-dcgan

from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Reshape
from keras.layers.core import Activation
from keras.layers.normalization import BatchNormalization
from keras.layers.convolutional import UpSampling2D
from keras.layers.convolutional import Conv2D, MaxPooling2D
from keras.layers.core import Flatten
from keras.optimizers import SGD
from keras.datasets import mnist
import numpy as np
from PIL import Image
import argparse
import math
import matplotlib.pyplot as plt

def generator_model():
    model = Sequential()
    #输入100维,输出1024维,中间激活函数全用的tanh,
    model.add(Dense(input_dim=100, output_dim=1024))
    model.add(Activation('tanh'))
    #图像从1024->128*7*7
    model.add(Dense(128*7*7))
    model.add(BatchNormalization())
    model.add(Activation('tanh'))
    #reshape成128通道的7*7特征图,
    model.add(Reshape((7, 7, 128), input_shape=(128*7*7,)))
    #Upsampleing2D成14*14特征图
    model.add(UpSampling2D(size=(2, 2)))
    #卷积成64通道的
    model.add(Conv2D(64, (5, 5), padding='same'))
    model.add(Activation('tanh'))
    #Upsampleing2D成28*28特征图
    model.add(UpSampling2D(size=(2, 2)))
    #卷积成128通道的
    model.add(Conv2D(1, (5, 5), padding='same'))
    model.add(Activation('tanh'))
    return model


def discriminator_model():
    model = Sequential()
    #输入的是1通道的28*28图像,通过卷积之后变成64通道的28*28的特征图
    model.add(Conv2D(64, (5, 5),padding='same',input_shape=(28, 28, 1)))
    model.add(Activation('tanh'))
    #MaxPooling2D缩放至64通道的14*14特征图
    model.add(MaxPooling2D(pool_size=(2, 2)))
    #卷积成128通道的14*14的特征图
    model.add(Conv2D(128, (5, 5)))
    model.add(Activation('tanh'))
    #MaxPooling2D缩放至128通道的14*14特征图
    model.add(MaxPooling2D(pool_size=(2, 2)))
    #将14*14*128展平
    model.add(Flatten())
    #全连接输出1024维
    model.add(Dense(1024))
    model.add(Activ
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值