TensorFlow应用实战-13-编写生成器模型

编写生成器模型

# 定义生成器模型
# 从随机数来生成图片
def generator_model():
    model = tf.keras.models.Sequential()
    # 接收正态分布的随机数
    # 输入的维度是 100, 输出维度(神经元个数)是1024 的全连接层
    model.add(tf.keras.layers.Dense(input_dim=100, units=1024))
    model.add(tf.keras.layers.Activation("tanh"))
    model.add(tf.keras.layers.Dense(128 * 8 * 8))  # 8192 个神经元的全连接层
    model.add(tf.keras.layers.BatchNormalization())  # 批标准化
    model.add(tf.keras.layers.Activation("tanh"))
    model.add(tf.keras.layers.Reshape((8, 8, 128), input_shape=(128 * 8 * 8, )))  # 8 x 8 像素
    model.add(tf.keras.layers.UpSampling2D(size=(2, 2)))  # 16 x 16像素
    model.add(tf.keras.layers.Conv2D(128, (5, 5), padding="same"))
    model.add(tf.keras.layers.Activation("tanh"))
    model.add(tf.keras.layers.UpSampling2D(size=(2, 2)))  # 32 x 32像素
    model.add(tf.keras.layers.Conv2D(128, (5, 5), padding="same"))
    model.add(tf.keras.layers.Activation("tanh"))
    model.add(tf.keras.layers.UpSampling2D(size=(2, 2)))  # 64 x 64像素
    model.add(tf.keras.layers.Conv2D(3, (5, 5), padding="same"))
    model.add(tf.keras.layers.Activation("tanh"))

    return model

反卷积不是那么准确。

https://www.tensorflow.org/versions/master/api_docs/python/tf/keras/layers/BatchNormalization

将前一层激活函数标准化一下。对于激活函数应用一个转换,使得平均激活接近于0

应用保持平均激活接近0和激活标准偏差接近1的转换

经过这个步骤会变成8,8的图片

mark

UpSampling2D是池化的一个反操作,pooling = subsampling 亚采样

upsampling 超采样。本来(8,8)像素的图片会变成16,16

再经过一个卷积层。激活层。向上采样。(32,32)

激活,之后再超采样。这里的卷积层 过滤器3 深度为3

编写训练神经网络的方法

我们的images目录中有许多(64,64)的图片。

构造一个 Sequential 对象,包含一个 生成器 和一个 判别器

实现: 输入 -> 生成器 -> 判别器 -> 输出

https://medium.com/@awjuliani/generative-adversarial-networks-explained-with-a-classic-spongebob-squarepants-episode-54deab2fce39

mark

def generator_containing_discriminator(generator, discriminator):
    model = tf.keras.models.Sequential()
    model.add(generator)
    discriminator.trainable = False  # 初始时 判别器 不可被训练
    model.add(discriminator)
    return model

定义一些超参数

# Hyper parameter(超参数)
EPOCHS = 100
BATCH_SIZE = 128
LEARNING_RATE = 0.0002
BETA_1 = 0.5

每个训练轮中一次取batchsize大小。学习率。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏郭耀华‘s Blog

各种卷积结构原理及优劣总结

卷积神经网络作为深度学习的典型网络,在图像处理和计算机视觉等多个领域都取得了很好的效果。

571
来自专栏量子位

一文了解各种卷积结构原理及优劣

王小新 编译自 Medium 量子位 出品 | 公众号 QbitAI 卷积神经网络作为深度学习的典型网络,在图像处理和计算机视觉等多个领域都取得了很好的效果。 ...

3446
来自专栏绿巨人专栏

神经网络学习笔记-02-循环神经网络

3407
来自专栏专知

【干货】深入理解自编码器(附代码实现)

【导读】自编码器可以认为是一种数据压缩算法,或特征提取算法。本文作者Nathan Hubens 介绍了autoencoders的基本体系结构。首先介绍了编码器和...

6337

Keras中神经网络模型的5阶段生命周期

使用Python的Keras库可以很容易创建和评测深度学习神经网络,但是您必须遵循严格的模型生命周期。

2539
来自专栏人工智能LeadAI

零基础入门深度学习 | 第四章:卷积神经网络

无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习这个超热的技术,会不会感...

4467
来自专栏专知

【PyTorch实战】 minibatching,数据加载和模型构建

1752
来自专栏DT乱“码”

TensorFlow实现卷积神经网络

1.卷积神经网络简介 卷积神经网络(convolutional neural network, CNN),最早是19世纪60年代,生物学家对猫视觉皮层研究发...

2919
来自专栏量化投资与机器学习

从Encoder到Decoder实现Seq2Seq模型(算法+代码)

知乎专栏:机器不学习 作者:天雨栗 | 蚂蚁金服 | 数据算法 已授权刊登 前言 好久没有更新专栏,今天我们来看一个简单的Seq2Seq实现,我们将使用Tens...

5186
来自专栏大数据文摘

手把手 | 30行JavaScript代码,教你分分钟创建神经网络

1593

扫码关注云+社区