TensorFlow应用实战-12-编写DCGAN的判别模型

编写DCGAN的判别模型

新建一个文件network.py 用来定义我们的生成器和判别器的模型

# -*- coding: UTF-8 -*-

"""
DCGAN 深层卷积的生成对抗网络
"""

import keras as tf.keras

首先定义判别器模型

有一个卷积的判别器和一个反卷积的生成器。卷积的判别器判断我们生成的样本和真实的样本是否匹配。

反卷积的生成器用于从一些随机的噪声数据。矩阵一样的数据生成我们的假样本。

生成器(Generator) 基本原理

mark

由简单到复杂地反向生成。

判别器(Discriminator) 基本原理

mark

逐层深入 “抽丝剥茧” 地 “理解” 一张图片或其他事物

mark

我们之前使用过的卷积神经网络是这样的。我们判别器模型就类似于这个卷积神经网络的图。

输入一张图片一层一层抽丝剥茧地提取元素。我们先写判别器,因为它是一个正向的传播网络。而DCGAN里面的生成器却是一个有点类似反向的卷积神经网络的。

从噪声去生成最后的图片。

我们先定义判别器的模型

# 定义判别器模型
def discriminator_model():
    # sequential,线性堆叠器。逐层添加网络
    model = tf.keras.models.Sequential()

    # 添加一层卷积: 
    model.add(tf.keras.layers.Conv2D(
        64,  # 64 个过滤器,输出的深度(depth)是 64
        (5, 5),  # 过滤器在二维的大小是(5 * 5)
        padding='same',  # same 表示输出的大小不变,因此需要在外围补零2圈
        input_shape=(64, 64, 3)  # 输入形状 [64, 64, 3]。3 表示 RGB 三原色
    ))
    model.add(tf.keras.layers.Activation("tanh"))  # 添加 Tanh 激活层
    model.add(tf.keras.layers.MaxPool2D(pool_size=(2, 2)))  # 池化层
    model.add(tf.keras.layers.Conv2D(128, (5, 5)))
    model.add(tf.keras.layers.Activation("tanh"))
    model.add(tf.keras.layers.MaxPool2D(pool_size=(2, 2)))
    model.add(tf.keras.layers.Conv2D(128, (5, 5)))
    model.add(tf.keras.layers.Activation("tanh"))
    model.add(tf.keras.layers.MaxPool2D(pool_size=(2, 2)))
    model.add(tf.keras.layers.Flatten())  # 扁平化
    model.add(tf.keras.layers.Dense(1024))  # 1024 个神经元的全连接层
    model.add(tf.keras.layers.Activation("tanh"))
    model.add(tf.keras.layers.Dense(1))  # 1 个神经元的全连接层
    model.add(tf.keras.layers.Activation("sigmoid"))  # 添加 Sigmoid 激活层

    return model

定义判别器之后再去定义生成器,就有点像把模型倒转一下的操作。sequential像一个汉堡包的模子。我们可以通过add方法去添加层。

keras.layer中的层都可以被添加进来。conv2d

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

64个过滤器对于图像进行64次扫描。每扫描一次输出的深度就增加一层。

(5,5) 过滤器在二维平面的高和宽,扫描的区域

第三个参数是是否补padding。 补0,same表示输出的大小不变,因此需要在外围补零两圈。

输入形状 64 64 3 彩色图片

tanh激活层,池化层(maxpooling),宽高各缩小2 (亚采样)

128个过滤器 过滤器大小。

全连接层输出维度1024

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器学习算法全栈工程师

朴素贝叶斯实战篇之新浪新闻分类

Python版本: Python3.x 作者:崔家华 运行平台: Windows 编辑:黄俊嘉...

4706
来自专栏CVer

TensorFlow和深度学习入门教程

英文原文:https://codelabs.developers.google.com/codelabs/cloud-tensorflow-mnist/#0 C...

3608
来自专栏CVer

风格迁移三部曲(二)之固定风格任意内容的快速风格迁移

上篇介绍了风格迁移三部曲(一)之普通风格迁移,本文将继续介绍第二种风格迁移方式:固定风格任意内容的快速风格迁移。

830
来自专栏决胜机器学习

机器学习(二十三) —— 大数据机器学习(随机梯度下降与map reduce)

机器学习(二十三)——大数据机器学习(随机梯度下降与map reduce) (原创内容,转载请注明来源,谢谢) 一、概述 1、存在问题 当样本集非常大的时候,...

3373
来自专栏深度学习那些事儿

TensorFlow中滑动平均模型介绍

其中a的取值范围[0,1],具体就是:本次滤波结果=(1-a)*本次采样值+a*上次滤波结果,采用此算法的目的是:

2229
来自专栏AI科技大本营的专栏

AI 技术讲座精选:Python中使用LSTM网络进行时间序列预测

长短记忆型递归神经网络拥有学习长观察值序列的潜力。 它似乎是实现时间序列预测的完美方法,事实上,它可能就是。 在此教程中,你将学习如何构建解决单步单变量时间序...

3514
来自专栏AI科技大本营的专栏

如何在Python中用LSTM网络进行时间序列预测

Matt MacGillivray 拍摄,保留部分权利 翻译 | AI科技大本营(rgznai100) 长短记忆型递归神经网络拥有学习长观察值序列的潜力。它似...

4454
来自专栏机器之心

深度 | 神经网络基础:七种网络单元,四种层连接方式

选自THE ASIMOV INSTITUTE 作者:FJODOR VAN VEEN 机器之心编译 参与:黄小天、李亚洲 2016 年 9 月,Fjodor Va...

31910
来自专栏和蔼的张星的图像处理专栏

SAMF

论文:paper 结合了CN和KCF的多尺度扩展,看文章之前就听说很暴力,看了以后才发现原来这么暴力。 论文的前一半讲KCF,后一半讲做的实验,中间一点点大...

822
来自专栏机器之心

学界 | 谷歌论文新突破:通过辅助损失提升RNN学习长期依赖关系的能力

选自arXiv 机器之心编译 参与:李诗萌、黄小天 本文提出了一种简单的方法,通过在原始函数中加入辅助损失改善 RNN 捕捉长期依赖关系的能力,并在各种设置下评...

3455

扫码关注云+社区