GAN初识

1. 生成对抗网络GAN简介

1.1 生成器

G(Z)接受随机噪声Z作为输入生成仿品,并训练自己去欺骗判别器D,让D以为G(Z)产生的任何数据都是真实的。

1.2 判别器

D(Y)可以基于真品和仿品来判断仿造品的仿真程度,通常值越靠近0表示越真实(靠近1表示仿造)。其目标是:使每个真实数据分布中的图像的D(Y)值最大化,并使真实数据分布之外的图像D(Y)值最小化。

1.3 训练原理

生成器和判别器进行一个相对立的博弈,因此名为对抗性训练。一般以交替方式训练G和D,其目标函数表示为损失函数,并用梯度下降算法进行优化。D和G都通过反向传播来调整生成器的参数,这样G就能够学习如何在越来越多的情况下欺骗D,最后G将学习如何生成可以以假乱真的仿造图片。

2. 实现DCGAN网络

小知识:

(1)LeakyReLU允许单元未激活时有个小的梯度,在许多情况下,它能提高GAN的性能。

(2)BatchNormalization() 批归一化通过将每个单元的输入归一化为0均值、单位方差,来帮助稳定学习的技术。在许多情况下加快了训练,减少了初始化不良的问题 ,并且能更普遍地产生更准确的结果。

2.1 定义生成器G

python 复制代码
from keras.models import Sequential
from keras.layers.convolutional import Conv2D, MaxPooling2D
from keras.layers.core import Activation, Flatten, Dense, Dropout
from keras.datasets import cifar10
from keras.utils import np_utils
from keras.optimizers import RMSprop

def generator_model():
    model = Sequential()
    model.add(Dense(input_dim=100, output_dim=1024))
    model.add(Activation('tanh'))
    model.add(Dense(128*7*7))
    model.add(BatchNormalization())
    model.add(Activation('tanh'))
    model.add(Reshape((128, 7, 7), input_shape=(128*7*7,)))
    model.add(UpSampling2D(size=(2, 2)))
    model.add(Conv2D(64, 5, 5, border_mode='same'))
    model.add(Activation('tanh'))
    model.add(UpSampling2D(size=(2, 2)))
    model.add(Conv2D(1, 5, 5, border_mode='same'))
    model.add(Activation('tanh'))
    return model
    # 注意:这里的卷积网络没有任何池化操作

2.2 定义判别器D

python 复制代码
def discriminator_model():
    model = Sequential()
    model.add(Dense(input_dim=100, output_dim=1024))
    model.add(Conv2D(64, 5, 5, border_mode='same', input_shape=(1, 28, 28)))
    model.add(Activation('tanh'))
    model.add(MaxPooling2D(pool_size(2, 2)))
    model.add(Conv2D(128, 5, 5))
    model.add(Activation('tanh'))
    model.add(MaxPooling2D(pool_size(2, 2)))
    model.add(Flatten())
    model.add(Dense(1024))
    model.add(Activation('tanh'))
    model.add(Dense(1))
    model.add(Activation('sigmoid'))
    return model

2.3 组合

python 复制代码
# 一个对抗模型,其 G和 D基于相同的模型 M
adversarial_model = AdversarialModel(base_model=M,
                                     player_params=[generator.trainable_weights, discriminator.trainable_weights],
                                     player_names=['generator', 'discriminator'])
# G和D基于两个不同的模型
adversarial_model = AdversarialModel(player_models=[gan_g, gan_d],
                                     player_params=[generator.trainable_weights, discriminator.trainable_weights],
                                     player_names=['generator', 'discriminator'])
相关推荐
北京地铁1号线1 小时前
人工智能岗位招聘专业笔试试卷及答案
人工智能·深度学习·计算机视觉·大语言模型
d0ublεU0x001 小时前
预训练模型
人工智能·机器学习
edisao1 小时前
二。星链真正危险的地方,不在天上,而在网络底层
大数据·网络·人工智能·python·科技·机器学习
永远都不秃头的程序员(互关)1 小时前
【K-Means深度探索(三)】告别“初始陷阱”:K-Means++优化质心初始化全解析!
算法·机器学习·kmeans
咚咚王者2 小时前
人工智能之核心基础 机器学习 第十六章 模型优化
人工智能·机器学习
叫我:松哥2 小时前
基于Flask框架开发的二手房数据分析与推荐管理平台,集成大数据分析、机器学习预测和智能推荐技术
大数据·python·深度学习·机器学习·数据分析·flask
2501_942191772 小时前
【深度学习应用】香蕉镰刀菌症状识别与分类:基于YOLO13-C3k2-MBRConv5模型的实现与分析
人工智能·深度学习·分类
知乎的哥廷根数学学派2 小时前
基于卷积特征提取和液态神经网络的航空发动机剩余使用寿命预测算法(python)
人工智能·pytorch·python·深度学习·神经网络·算法
高洁012 小时前
AIGC技术与进展(2)
人工智能·python·深度学习·机器学习·数据挖掘
岑梓铭2 小时前
YOLO深度学习(计算机视觉)—毕设笔记(yolo训练效率加快)
人工智能·笔记·深度学习·神经网络·yolo·计算机视觉