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

相关文章

来自专栏数据科学学习手札

(数据科学学习手札29)KNN分类的原理详解&Python与R实现

  KNN(k-nearst neighbors,KNN)作为机器学习算法中的一种非常基本的算法,也正是因为其原理简单,被广泛应用于电影/音乐推荐等方面,即有些...

50213
来自专栏李智的专栏

Deep learning基于theano的keras学习笔记(3)-网络层

1.3 Dropout层 为输入数据施加Dropout。Dropout将在训练过程中每次更新参数时随机断开一定百分比(p)的输入神经元连接,Dropout层...

1402
来自专栏深度学习与计算机视觉

理解图像卷积操作的意义

在图像处理领域,我们经常能听到滤波,卷积之类的词,其实他们都可以看做一种图像的卷积操作,相对应的卷积核,卷积模板,滤波器,滤波模板,扫描窗其实也都是同一个东西。...

5666
来自专栏磐创AI技术团队的专栏

使用Keras进行深度学习:(一)Keras 入门

导语 Keras是Python中以CNTK、Tensorflow或者Theano为计算后台的一个深度学习建模环境。相对于其他深度学习的框架,如Tensorflo...

3696
来自专栏Python小屋

KNN分类算法原理与Python+sklearn实现根据身高和体重对体型分类

KNN算法是k-Nearest Neighbor Classification的简称,也就是k近邻分类算法。基本思路是在特征空间中查找k个最相似或者距离最近的样...

3177
来自专栏程序生活

机器学习(四)通过递归的矩阵向量空间预测组合语义摘要简介方法结果结论

Semantic Compositionality Through Recursive Matrix-Vector Spaces 摘要 单字矢量空间模型已经在学...

3417
来自专栏LhWorld哥陪你聊算法

【深度学习】--DCGAN从入门到实例应用

DCGAN就是Deep Concolutions应用到GAN上,但是和传统的卷积应用还有一些区别,最大的区别就是没有池化层。本文将详细分析卷积在GAN上的应用。

2022
来自专栏烂笔头

曲线点抽稀算法-Python实现

目录[-] 何为抽稀 在处理矢量化数据时,记录中往往会有很多重复数据,对进一步数据处理带来诸多不便。多余的数据一方面浪费了较多的存储空间,另一方面造成所要...

4986
来自专栏贾志刚-OpenCV学堂

图像二值化-局部阈值方法汇总

概述: 在图像处理中二值图像处理与分析是图像处理的重要分支,图像二值分割尤为重要,有时候基于全局阈值自动分割的方法并不能准确的将背景和对象二值化,这个时候就需要...

72810
来自专栏人人都是极客

Peter教你谈情说AI | 09决策树(下)—既能回归又能分类的模型

我们提取七个特征,用来判断一个形象,是人是猫。这七个特征包括:有否蝴蝶结;是否穿衣服;是否高过5个苹果;是否有胡子;是否圆脸;是否有猫耳朵;是否两脚走路。

752

扫码关注云+社区