使用对抗生成模型生成手写数字

本文介绍如何利用对抗生成模型(GAN)和TensorFlow来生成手写数字。文章详细阐述了生成器和判别器的结构,以及代价函数的设计,包括生成代价函数和判别代价函数。最后,文章提供了代码实现的步骤,包括数据预处理、模型构建、代价函数定义、优化器选择和模型训练等。
摘要由CSDN通过智能技术生成

1、概述

对抗生成模型是人工智能模型中经常使用的结构,本文介绍使用tensorflow实现手写数字的生成。生成式对抗网络(GAN, Generative Adversarial Networks )是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的方法之一。模型通过框架中(至少)两个模块:生成模型(Generative Model)和判别模型(Discriminative Model)的互相博弈学习产生相当好的输出。原始 GAN 理论中,并不要求 G 和 D 都是神经网络,只需要是能拟合相应生成和判别的函数即可。但实用中一般均使用深度神经网络作为 G 和 D 。一个优秀的GAN应用需要有良好的训练方法,否则可能由于神经网络模型的自由性而导致输出不理想。

生成效果如下图所示(该图片来自于tensorflow官网):

sample output

2、模型基本结构

模型的基本结构如下图所示

对模型说明如下

  1. 首先生成一个维度为100的随机噪点数据,该数据作为生成图像的原始语料
  2. 噪点数据经过生成模型的反卷积操作将维度为100的噪点数据扩充为28*28*1的图像数据
  3. 生成数据与真实数据经过判别的模型,通过特殊的代价函数的设计保证生成效果

2.1 生成器的基本结构

基本流程说明如下:

1、原始噪点信息:(256, 100)
2、噪点信息进行全链接处理 (256, 3136)

3、对x进行标准化处理,标准化之后的数据方差更接近于0.标准差更接近1

4、为了方便反卷积,将x数据整合为形状 7 7 64

5、进行第一次反卷积,形状不变(256, 7, 7, 64)

6、进行第二次反卷积,第二次反卷积之后深度减半,长宽加倍(256, 14, 14, 32)

7、进行第三次反卷积,第三次反卷积之后深度变为1,长宽变为28,为训练数据对象保持一致(256, 28, 28, 1)

生成器的参考代码如下:

class Generator(tf.keras.Model):
    def __init__(self):
        super(Generator, self).__init__()
        self.fc1 = tf.keras.layers.Dense(7*7*64, use_bias=False)
        self.batchnorm1 = tf.keras.layers.BatchNormalization()

        self.conv1 = tf.keras.layers.Conv2DTranspose(64, (5, 5), strides=(1, 1), padding='same', use_bias=False)
        self.batchnorm2 = tf.keras.layers.BatchNormalization()

        self.conv2 = tf.keras.layers.Conv2DTranspose(32, (5, 5), strides=(2, 2), padding='same', use_bias=False)
        self.batchnorm3 = tf.keras.layers.BatchNormalization()

        self.conv3 = tf.keras.layers.Conv2DTranspose(1, (5, 5), strides=(2, 2), padding='same', use_bias=False)
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值