当前位置: 首页 > news >正文

简单易上手的生成对抗网络

模型原理

生成对抗网络是指一类采用对抗训练方式进行学习的深度生成模型,包含的判别网络生成网络都可以根据不同的生成任务使用不同的网络结构。

生成器: 通过机器生成数据,最终目的是骗过判别器。
判别器: 判断这张图像是真实的还是机器生成的,目的是找出生成器做的假数据。

构建GAN模型的基本逻辑: 现实问题需求→建立实现功能的GAN框架(编程)→训练GAN(生成网络、对抗网络)→成熟的GAN模型→应用。

GAN训练过程:
生成器生成假数据,然后将生成的假数据和真数据都输入判别器,判别器要判断出哪些是真的哪些是假的。判别器第一次判别出来的肯定有很大的误差,然后我们根据误差来优化判别器。现在判别器水平提高了,生成器生成的数据很难再骗过判别器了,所以我们得反过来优化生成器,之后生成器水平提高了,然后反过来继续训练判别器,判别器水平又提高了,再反过来训练生成器,就这样循环往复,直到达到纳什均衡。

GAN的发展历程

  1. GAN的基本思想起源于2014年,由伊恩·古德费洛等人首次提出。
  2. DCGAN,它在生成器和判别器中都使用了卷积层,取得了更好的图像生成效果。
  3. ConditionalGAN,通过引入条件信息指导生成器生成特定类型的数据。 Wasserstein
  4. WGAN使用Wasserstein距离作为损失函数,为GAN的训练提供了更稳定的优化方法,提高了生成样本的质量。

代码实现

DCGAN模型:

generator = Sequential()
generator.add(Dense(7 * 7 * 128, input_shape=[100]))
generator.add(Reshape([7, 7, 128]))
generator.add(BatchNormalization())
generator.add(Conv2DTranspose(64, kernel_size=5, strides=2, padding="same",activation="relu"))
generator.add(BatchNormalization())
generator.add(Conv2DTranspose(1, kernel_size=5, strides=2, padding="same",activation="tanh"))discriminator = Sequential()
discriminator.add(Conv2D(64, kernel_size=5, strides=2, padding="same",activation=LeakyReLU(0.3),input_shape=[28, 28, 1]))
discriminator.add(Dropout(0.5))
discriminator.add(Conv2D(128, kernel_size=5, strides=2, padding="same",activation=LeakyReLU(0.3)))
discriminator.add(Dropout(0.5))
discriminator.add(Flatten())
discriminator.add(Dense(1, activation="sigmoid"))

模型训练:

GAN =Sequential([generator,discriminator])
discriminator.compile(optimizer='adam',loss='binary_crossentropy')
discriminator.trainable = FalseGAN.compile(optimizer='adam',loss='binary_crossentropy')epochs = 150 
batch_size = 100
noise_shape=100with tf.device('/gpu:0'):for epoch in range(epochs):print(f"Currently on Epoch {epoch+1}")for i in range(X_train.shape[0]//batch_size):if (i+1)%50 == 0:print(f"\tCurrently on batch number {i+1} of {X_train.shape[0]//batch_size}")noise=np.random.normal(size=[batch_size,noise_shape])gen_image = generator.predict_on_batch(noise)train_dataset = X_train[i*batch_size:(i+1)*batch_size]train_label=np.ones(shape=(batch_size,1))discriminator.trainable = Trued_loss_real=discriminator.train_on_batch(train_dataset,train_label)train_label=np.zeros(shape=(batch_size,1))d_loss_fake=discriminator.train_on_batch(gen_image,train_label)noise=np.random.normal(size=[batch_size,noise_shape])train_label=np.ones(shape=(batch_size,1))discriminator.trainable = False #while training the generator as combined model,discriminator training should be turned offd_g_loss_batch =GAN.train_on_batch(noise, train_label)if epoch % 10 == 0:samples = 10x_fake = generator.predict(np.random.normal(loc=0, scale=1, size=(samples, 100)))for k in range(samples):plt.subplot(2, 5, k+1)plt.imshow(x_fake[k].reshape(28, 28), cmap='gray')plt.xticks([])plt.yticks([])plt.tight_layout()plt.show()print('Training is complete')

使用np.random.normal生成的噪声被作为输入给发生器:

noise=np.random.normal(loc=0, scale=1, size=(100,noise_shape))
gen_image = generator.predict(noise)
plt.imshow(noise)
plt.title('DCGAN Noise')

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 并发编程之JMMvolatile详解
  • watchdog: BUG: soft lockup
  • 学习笔记 ---- 数论分块(整除分块)
  • Leetcode102二叉树的层序遍历(java实现)
  • (游戏设计草稿) 《外卖员模拟器》 (3D 科幻 角色扮演 开放世界 AI VR)
  • Docker容器技术
  • Java面试自我介绍
  • 低空经济概念火爆:无人机飞手人才培养先行
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • Python和C++(CUDA)及Arduino雅可比矩阵导图
  • 大语言模型的超参数含义: Top-P 采样; Top-P 采样;logit_bias:
  • 浏览器播放RTSP流,支持H264、H265等格式,支持IE、Chrome等浏览器
  • 六、vue进阶知识点
  • 安防监控/软硬一体/视频汇聚网关EasyCVR硬件启动崩溃是什么原因?
  • Centos7.x安装grafana11
  • #Java异常处理
  • [case10]使用RSQL实现端到端的动态查询
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 78. Subsets
  • Angular 4.x 动态创建组件
  • angular2开源库收集
  • css属性的继承、初识值、计算值、当前值、应用值
  • express.js的介绍及使用
  • HTTP中GET与POST的区别 99%的错误认识
  • LeetCode29.两数相除 JavaScript
  • Sass 快速入门教程
  • Selenium实战教程系列(二)---元素定位
  • ubuntu 下nginx安装 并支持https协议
  • vue-router的history模式发布配置
  • 闭包,sync使用细节
  • 读懂package.json -- 依赖管理
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 驱动程序原理
  • 如何编写一个可升级的智能合约
  • 使用common-codec进行md5加密
  • -- 数据结构 顺序表 --Java
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 学习JavaScript数据结构与算法 — 树
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 大数据全解:定义、价值及挑战
  • ​【已解决】npm install​卡主不动的情况
  • # 安徽锐锋科技IDMS系统简介
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,双向扫描)xLSTM 作为通用视觉骨干
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (SpringBoot)第七章:SpringBoot日志文件
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (利用IDEA+Maven)定制属于自己的jar包
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (六)软件测试分工
  • (十)c52学习之旅-定时器实验
  • (算法设计与分析)第一章算法概述-习题