DCGAN基于Keras的实现

前几天学习了一下GAN的相关知识,有NIPS 2016中的教程, 
还有知乎专栏的令人拍案叫绝的Wasserstein GAN,以及后续Wasserstein GAN最新进展:从weight clipping到gradient penalty,更加先进的Lipschitz限制手法 
这两篇文章推导写的很好,有需要推荐直接看论文 
还有深入浅出 GAN·原理篇文字版(完整)|干货

先是找到了这个https://github.com/jacobgil/keras-dcgan 
这个对应的keras版本相对较旧,里面有些需要修改,稍微提一下 
先是generator和discriminator里语法需要修改下,对应目前的2.0版本

def generator_model():
    model = Sequential()
    model.add(Dense(units=1024, input_dim=100))
    model.add(Activation('tanh'))
    model.add(Dense(128*7*7))
    model.add(BatchNormalization())
    model.add(Activation('tanh'))
    model.add(Reshape((7, 7, 128), input_shape=(128*7*7,)))
    model.add(UpSampling2D(size=(2, 2)))
    model.add(Conv2D(64, (5, 5), padding='same'))
    model.add(Activation('tanh'))
    model.add(UpSampling2D(size=(2, 2)))
    model.add(Conv2D(1, (5, 5), padding='same'))
    model.add(Activation('tanh'))
    return model
def discriminator_model():
    model = Sequential()
    model.add(Conv2D(64, (5, 5),
                     padding='same',
                     input_shape=(28, 28, 1)))
    model.add(Activation('tanh'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Conv2D(128, (5, 5)))
    model.add(Activation('tanh'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Flatten())
    model.add(Dense(1024))
    model.add(Activation('tanh'))
    model.add(Dense(1))
    model.add(Activation('sigmoid'))
    return model

还有一处是def train(BATCH_SIZE)中的

X_train = X_train.reshape((X_train.shape[0], 1) + X_train.shape[1:])

改为

X_train = X_train.reshape(X_train.shape[0], 28, 28, 1)
X_test = X_test.reshape(X_test.shape[0], 28, 28, 1) 

这里是因为我选择tenseoflow作为后台,同时生成图像的函数要修改如下

def combine_images(generated_images):
    num = generated_images.shape[0]
    width = int(math.sqrt(num))
    height = int(math.ceil(float(num)/width))
    shape = generated_images.shape[1:3]
    image = np.zeros((height*shape[0], width*shape[1]),
                     dtype=generated_images.dtype)
    for index, img in enumerate(generated_images):
        i = int(index/width)
        j = index % width
        image[i*shape[0]:(i+1)*shape[0], j*shape[1]:(j+1)*shape[1]] = \
            img[ :, :, 0]
    return image

还有一点是如果下载数据集的时候网不好(比如我),手动下载后放到~/.keras/datasets里即可

后来又发现了这个dcgan_minst.py 
这个是基于tensorflow 1.0 和 keras 2.0版的,和前面的区别是网络结构有所不同,前面是论文中的DCGAN结构,这个有所修改 
这里写图片描述 
最终效果嘛,我只迭代了1000次,次数太少效果不太好哈~ 


 
1000次结果 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值