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 条评论
登录 后参与评论

相关文章

来自专栏超然的博客

MIT-线性代数笔记(1-6)

  对方程组中某个方程进行时的那个的数乘和加减,将某一未知系数变为零,来削弱未知数个数

1142
来自专栏null的专栏

简单易学的机器学习算法——在线顺序极限学习机OS-ELM

   这篇文章主要是前面整理的,就直接上图了。 ? ? ? ? ? ? ? 实验: # coding:UTF-8 ################# # OS_...

1.1K5
来自专栏大数据互联网思维

FCN 的简单实现

学习了沐神的 gluon 课程,觉得里面有关于 fcn 的课程(http://t.cn/RQI7iD7 ) 特别有用,于是总结一下,同时使用 pytorch 重...

1623
来自专栏机器学习养成记

Bagging算法(R语言)

Bagging算法(bootstrap aggregation)由Leo Breiman提出。是一种在每个自助样本集上建立基分类器,通过投票指派得到测试样本最终...

36810
来自专栏技术随笔

[Detection] CNN 之 "物体检测" 篇IndexRCNNFast RCNNFaster RCNNR-FCNYOLOSSDNMS

37910
来自专栏null的专栏

简单易学的机器学习算法——线性回归(1)

一、线性回归的概念     对连续型数据做出预测属于回归问题。举个简单的例子:例如我们在知道房屋面积(HouseArea)和卧室的数量(Bedrooms)的情况...

3598
来自专栏人工智能

基于Region Proposal的深度学习目标检测简述(一)

开篇需要跟大家道歉,一切忙没时间的理由都是借口,实际上就是偷懒了,这么久才更新,非常抱歉! 本篇争取以最简明的叙述,帮助大家理解下基于Region Propos...

2826
来自专栏AI研习社

FCN 的简单实现

学习了沐神的 gluon 课程,觉得里面有关于 fcn 的课程(http://t.cn/RQI7iD7 ) 特别有用,于是总结一下,同时使用 pytorch 重...

9627
来自专栏Petrichor的专栏

深度学习: smooth L1 loss 计算

RPN的目标函数是分类和回归损失的和,分类采用 交叉熵,回归采用稳定的 Smooth L1,

1644
来自专栏瓜大三哥

DeepFace

检测→对齐→表示→分类 在文章中,通过3d模型改进了人脸对齐的方法。然后,通过基于4million人脸图像(4000个个体)训练的一个9层的人工神经网络来进行人...

2376

扫码关注云+社区