GAN初识

2023-09-15 15:49:21

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

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

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 组合

# 一个对抗模型,其 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'])

更多推荐

websocket请求通过IteratorAggregate实现流式输出

对接国内讯飞星火模型,官方文档接口采用的是websocket跟国外chatgpt有些差异。虽然官网给出一个简单demo通过while(true),websocket的receive()可以实现逐条接受并输出给前端,但是通用和灵活度不高。不能兼容现有项目框架的流式输出。故模仿openai,采用IteratorAggreg

使用 Python 和机器学习掌握爬虫和情感分析

在本教程中,我们将抓取一个网站并使用自然语言处理来分析文本数据。最终结果将是对网站内容的情感分析。以下是我们将遵循的步骤:项目范围所需的库了解网页抓取抓取网站文本清理和预处理使用机器学习进行情感分析最后结果一、项目范围该项目的目标是抓取网站,执行文本预处理,然后应用机器学习算法对网站内容进行情感分析。换句话说,我们想要

Git全套命令使用

日升时奋斗,日落时自省目录1、Git安装1.1、创建git本地仓库1.2、配置Git1.3、认识Git内部区分2、Git应用操作2.1、添加文件2.2、查看日志2.3、查看修改信息2.4、查看添加信息3、版本回退4、撤销修改4.1、工作区撤销4.2、已经add,但没有commit4.3、已经add,也commit4.4

ESLint+Prettier+VSCode编程规范

编程规范ESLintPrettierESLint和Prettier配合解决代码格式化问题1.在VSCode搜索Prettier插件安装2.创建prettier配置文件3.在VSCode中设置3.1找到左下角设置图标,点击设置3.2但是对VSCode而言,默认一个tab等于4个空格,而ESLint希望一个tab为两个空格

大模型微调方法

下面是一些参数高效的微调大模型方法:Adapter模型总览Adapter作为一个插件加入到大模型内,微调下游任务时,固定大模型参数,只训练Adapter参数。LoRALoRA名为大语言模型的低阶适应,最初设计用于微调LLM,但却在文生图领域大放异彩,并逐渐被人数知。其思想跟ResNet非常相似,通过在大模型旁侧添加一路

Mybatis的原理和MybaitsPlus

看完Mybatis的基本操作,我们来聊下Mybaits的底层实现原理:MyBatis是一个持久层框架,它的底层实现原理主要涉及SQL解析、参数映射、SQL执行和结果映射等方面。下面是MyBatis的基本工作原理:配置文件加载:MyBatis的配置文件(通常为mybatis-config.xml)被加载,并解析成内部的配

线性代数的本质(六)——线性空间

文章目录线性空间线性空间子空间坐标与同构线性变换与矩阵基变换与坐标变换线性空间线性空间Grant:普适的代价是抽象。仔细分析就会发现,关于向量空间的一切概念及有关定理都不依赖于向量的具体表现形式(有序数组),也不依赖于向量加法、数乘的具体计算式,而只依赖于如下两点:向量的加法与数乘运算封闭;加法、数乘满足八条运算法则。

EMMC模块电路的PCB设计建议

EMMC电路简介EMMC(EmbeddedMultiMediaCard)是MMC协会订立、主要针对手机或平板电脑等产品的内嵌式存储器标准规格。EMMC在封装中集成了一个控制器,提供标准接口并管理闪存。原理电路8位数据信号如图8-38所示,地址、控制信号如图8-39所示,电源信号如图8-40所示。RK3588EMMC控制

深入理解Java单例模式和优化多线程任务处理

目录饿汉模式懒汉模式单线程版多线程版双重检查锁定阻塞队列单例模式能保证某个类在程序中只存在唯一一份实例,而不会创建出多个实例,并提供一个全局访问点。饿汉模式类加载的同时,创建实例。classSingleton{privatestaticfinalSingletoninstance=newSingleton();//将构

《Web安全基础》07. 反序列化漏洞

web1:基本概念1.1:序列化&反序列化1.2:反序列化漏洞1.3:POP链2:PHP反序列化2.1:序列化&反序列化2.2:魔术方法3:JAVA反序列化3.1:序列化&反序列化3.2:反射机制3.3:相关资源本系列侧重方法论,各工具只是实现目标的载体。命令与工具只做简单介绍,其使用另见《安全工具录》。靶场参考:pi

利用Pycharm将python程序打包为exe文件(亲测可用)

最近做了一个关于py的小项目,对利用Pycharm将python文件打包为exe文件不是很熟悉,故学习记录之。目录一、下载pyinstaller库二、打开Pycharm进行打包(不更改图标)三、打开Pycharm进行打包(更改图标)一、下载pyinstaller库1.点击win+r,输入cmd打开控制管理器2.输入pi

热文推荐