【神经网络】生成对抗网络GAN
生成对抗网络GAN
欢迎访问Blog总目录!
文章目录
- 生成对抗网络GAN
- 1.学习链接
- 2.GAN结构
- 2.1.生成模型Generator
- 2.2.判别模型Discrimintor
- 2.3.伪代码
- 3.优缺点
- 3.1.优势
- 3.2.缺点
- 4.pytorch GAN
- 4.1.API
- 4.2.GAN的搭建
- 4.2.1.结果
- 4.2.2.代码
- 4.3.示意图:star:
1.学习链接
Generative Adversarial Networks
生成对抗网络(GAN) - 知乎 (zhihu.com)
深度学习----GAN(生成对抗神经网络)原理解析_gan神经网络-CSDN博客
图解 生成对抗网络GAN 原理 超详解_生成对抗网络gan图解-CSDN博客
2.GAN结构
GAN包含两个模型:
- 生成模型(Generator):接收随机噪声,生成看起来真实的、与原始数据相似的实例。
- 判别模型(Discrimintor):判断Generator生成的实例是真实的还是人为伪造的。(真实实例来源于数据集,伪造实例来源于生成模型)
最终得到效果极好的生成模型,其生成的实例真假难辨。
GAN的灵感来源于 “零和博弈” (完全竞争博弈),GAN就是通过生成网络G(Generator)和判别网络D(Discriminator)不断博弈,进而使G学习到数据的分布,即达到纳什均衡。
【纳什均衡】博弈中这样的局面,对于每个参与者来说,只要其他人不改变策略,他就无法改善自己的状况。对于GAN,即生成模型 G 恢复了训练数据的分布(造出了和真实数据一模一样的样本),判别模型D判别不出来结果(乱猜),准确率为 50%(收敛)。这样双方网络利益均最大化,不再改变自己的策略(不再更新自己的权重)。

2.1.生成模型Generator
- 输入: 数据集的某些向量信息,此处使用满足常见分布(高斯分布、均值分布等)的随机向量。
- 输出: 符合像素大小的图片。
- 结构: 全连接神经网络或者反卷积网络。

2.2.判别模型Discrimintor
- 输入: 伪造图片和数据集图片
- 输出: 图片的真伪标签
- 结构: 判别器模型(全连接网络、卷积网络等)

2.3.伪代码

3.优缺点
3.1.优势
- GAN采用的是一种无监督的学习方式训练,可以被广泛用在无监督学习和半监督学习领域
- 模型只用到了反向传播,而不需要马尔科夫链
3.2.缺点
- 难以学习离散数据,如文本
4.pytorch GAN
4.1.API
生成对抗网络 - PyTorch官方教程中文版 (panchuang.net)
4.2.GAN的搭建
绘制在upper_bound和lower_bound之间的一元二次方程画
4.2.1.结果
4.2.2.代码
import torch
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as plttorch.manual_seed(1) # reproducible
np.random.seed(1)# Hyper Parameters
BATCH_SIZE = 64
LR_G = 0.0001 # learning rate for generator
LR_D = 0.0001 # learning rate for discriminator
N_IDEAS = 5 # 噪声点个数
ART_COMPONENTS = 15 # 15个Y轴数据点
PAINT_POINTS = np.vstack([np.linspace(-1, 1, ART_COMPONENTS) for _ in range(BATCH_SIZE)])# show our beautiful painting range
# plt.plot(PAINT_POINTS[0], 2 * np.power(PAINT_POINTS[0], 2) + 1, c='#74BCFF', lw=3, label='upper bound')
# plt.plot(PAINT_POINTS[0], 1 * np.power(PAINT_POINTS[0], 2) + 0, c='#FF9359', lw=3, label='lower bound')
# plt.legend(loc='upper right')
# plt.show()def artist_works(): # painting from the famous artist (real target)a = np.random.uniform(1, 2, size=BATCH_SIZE)[:, np.newaxis]paintings = a * np.power(PAINT_POINTS, 2) + (a-1)paintings = torch.from_numpy(paintings).float()return paintingsG = nn.Sequential( # Generatornn.Linear(N_IDEAS, 128), # random ideas (could from normal distribution)nn.ReLU(),nn.Linear(128, ART_COMPONENTS), # making a painting from these random ideas
)D = nn.Sequential( # Discriminatornn.Linear(ART_COMPONENTS, 128), # receive art work either from the famous artist or a newbie like Gnn.ReLU(),nn.Linear(128, 1),nn.Sigmoid(), # tell the probability that the art work is made by artist
)opt_D = torch.optim.Adam(D.parameters(), lr=LR_D)
opt_G = torch.optim.Adam(G.parameters(), lr=LR_G)plt.ion() # something about continuous plottingfor step in range(10000):artist_paintings = artist_works() # real painting from artistG_noise = torch.randn(BATCH_SIZE, N_IDEAS, requires_grad=True) # random ideas\nG_paintings = G(G_noise) # fake painting from G (random ideas)prob_artist0 = D(artist_paintings) # 判断真画prob_artist1 = D(G_paintings) # 判断假画# D增加真画概率,减少伪画概率; 梯度下降法为减小误差,所以添加-号# D_loss越小,prob_artist0越大,prob_artist1越小D_loss = - torch.mean(torch.log(prob_artist0) + torch.log(1. - prob_artist1))opt_D.zero_grad()D_loss.backward(retain_graph=True) # reusing computational graphopt_D.step()# 重新采样G_noise = torch.randn(BATCH_SIZE, N_IDEAS, requires_grad=True) # random ideas\nG_paintings = G(G_noise) # fake painting from G (random ideas)prob_artist1 = D(G_paintings) # 判断假画# G_loss越小,prob_artist1越大G_loss = torch.mean(torch.log(1. - prob_artist1))opt_G.zero_grad()G_loss.backward()opt_G.step()if step % 50 == 0: # plottingplt.cla()plt.plot(PAINT_POINTS[0], G_paintings.data.numpy()[0], c='#4AD631', lw=3, label='Generated painting', )plt.plot(PAINT_POINTS[0], 2 * np.power(PAINT_POINTS[0], 2) + 1, c='#74BCFF', lw=3, label='upper bound')plt.plot(PAINT_POINTS[0], 1 * np.power(PAINT_POINTS[0], 2) + 0, c='#FF9359', lw=3, label='lower bound')# D 的判断准确度=50%最优plt.text(-.5, 2.3, 'D accuracy=%.2f (0.5 for D to converge)' % prob_artist0.data.numpy().mean(),fontdict={'size': 13})plt.text(-.5, 2, 'D score= %.2f (-1.38 for G to converge)' % -D_loss.data.numpy(), fontdict={'size': 13})plt.ylim((0, 3));plt.legend(loc='upper right', fontsize=10);plt.draw();plt.pause(0.01)plt.ioff()
plt.show()
4.3.示意图⭐️

相关文章:
【神经网络】生成对抗网络GAN
生成对抗网络GAN 欢迎访问Blog总目录! 文章目录 生成对抗网络GAN1.学习链接2.GAN结构2.1.生成模型Generator2.2.判别模型Discrimintor2.3.伪代码 3.优缺点3.1.优势3.2.缺点 4.pytorch GAN4.1.API4.2.GAN的搭建4.2.1.结果4.2.2.代码 4.3.示意图:star: 1.学习链接 …...
智慧能耗预付费系统解决方案——用户侧能源计量及收费
安科瑞电气股份有限公司 祁洁 15000363176 一、方案组织架构 二、方案特点 (1)多样组网,多样设备接入,多样部署; (2)集团管理、项目分级、分层拓扑; (3)…...
探秘大模型:《提示工程:技巧、方法与行业应用》背后的故事
提示工程是一种新兴的利用人工智能的技术,它通过设计提示引导生成式 AI 模型产生预期的输出,来提升人与 AI 的互动质量,激发 AI 模型的潜力,提升AI的应用水平。 为了让每一个人都拥有驱动大模型的能力,以微软全球副总裁…...
2024年光学通信和物联网、自动化控制和大数据国际会议(OCITACB2024)
2024年光学通信和物联网、自动化控制和大数据国际会议(OCITACB2024) 会议简介 2024年国际光通信与物联网、自动控制和大数据会议(OCITACB2024)的主要目标是促进光通信与物联网、自动管理和大数据领域的研发活动。另一个目标是促进研究人员、开发人员、工…...
q @ k运算及att = (q @ k.transpose(-2, -1))含义
以下代码经常在Transformer的算法中见到:q, k, v qkv[0], qkv[1], qkv[2] # query, key, value tensor q q * self.scale attn (q k.transpose(-2, -1))其中涉及到a b操作和transpose操作 a torch.Tensor([[1,2],[3,4]]) print(a)b torch.Tensor([[0.5,2],[…...
leetcode628-Maximum Product of Three Numbers
题目 给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。 示例 1: 输入:nums [1,2,3] 输出:6 分析 这道题目要求数组中三个数组成的最大乘积,由于元素有正数有负数ÿ…...
本地项目提交 Github
工具 GitIdeaGithub 账号 步骤 使用注册好的 Github 账号,登陆 Github; 创建 Repositories (存储库),注意填写图上的红框标注; 创建完成之后,找到存储库的 ssh 地址或 https 地址,这取决于你自己的配置…...
Idea中 maven 下载jar出现证书问题
目录 1: 具体错误: 2: 忽略证书代码: 3: 关闭所有idea, 清除缓存, 在下面添加如上忽略证书代码 4:执行 maven clean 然后刷刷新依赖 完成,撒花!&#x…...
ArcGIS Server 10发布要素服务时遇到的数据库注册问题总结(一)
工作环境: Windows 7 64 位旗舰版 ArcGIS Server 10.1 ArcGIS Desktop 10.1 IIS 7.0 开始的时候以为10.1发布要素服务和10.0一样,需要安装ArcSDE,后来查阅资料发现不需要,数据库直连方式就可以了。 首先我来说一下发布要素服…...
自我介绍的HTML 页面(入门)
一.前情提要 1.主要是代码示例,具体内容需自己填充 2.代码后是详解 二.代码实例和解析 代码 <!DOCTYPE html> <html lang"zh-CN"> <head> <meta charset"UTF-8"> <title>自我介绍页面</title>…...
负载均衡原理及算法
负载均衡(Load Balancing)是在计算机网络中,将工作负载(即请求)分配给多个资源,以实现最优资源利用、最大化性能、最小化延迟和提高可用性等目标的技术。负载均衡通常用于分布式系统、网络服务和服务器集群…...
【iOS ARKit】USDZ文件
USDZ 概述 ARKit 支持 USDZ(Universal Scene Description Zip,通用场景描述文件包)、Reality 两种格式的模型文件,得益于 USDZ的强大描述能力与网络传输便利性,使得iOS 设备能够在其信息(Message࿰…...
鹅厂实习offer
#转眼已经银四了,你收到offer了吗# 本来都打算四月再投实习了,突然三月初被wxg捞了(一年前找日常实习投的简历就更新了下),直接冲了,流程持续二十多天,结果是运气还不错,应该是部门比…...
极狐GitLab 如何在 helm 中恢复数据
本文作者:徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了如何在极狐GitLab …...
Hololens2远程音视频通话与AR远程空间标注,基于OpenXR+MRTK3+WebRTC实现
Hololens2远程音视频通话与AR远程空间标注 使用Unity2021.3.21版本开发,基于OpenXRMRTK3.0WebRTC实现。 (1)通过视频获取视频帧的矩阵的方法可以参考:https://learn.microsoft.com/zh-cn/windows/mixed-reality/develop/advanced…...
2024年03月CCF-GESP编程能力等级认证Scratch图形化编程二级真题解析
本文收录于专栏《Scratch等级认证CCF-GESP真题解析》,专栏总目录・点这里 一、单选题(一共 15 个题目,每题 2 分,共 30 分) 第1题 小杨的父母最近刚刚给他买了一块华为手表,他说手表上跑的是鸿蒙,这个鸿蒙是?( ) A、小程序 B、计时器 C、操作系统 D、神话人物 答案…...
开发语言漫谈-C#
C#的#,字面上的意思就是,也就是把C再。微软只所以搞C#就是要抗衡Java。微软当时搞了个J,被Java告了,没办法了只能另取炉灶。从纯技术角度来看,C#设计非常优秀,可以覆盖所有领域,是几乎唯一的全栈…...
微信小程序用户登录授权指定(旧版本)
配置旧版本基础库2.12.3 实现效果 点击登录按钮即可直接登录,获取用户昵称和头像 点击获取头像昵称按钮则需要授权,才能成功登录 代码实现 my.xml <!-- 登录页面,调试基础库为2.20.2库 --> <view class"mylogin"><block w…...
电商技术揭秘十五:数据挖掘与用户行为分析
相关系列文章 电商技术揭秘一:电商架构设计与核心技术 电商技术揭秘二:电商平台推荐系统的实现与优化 电商技术揭秘三:电商平台的支付与结算系统 电商技术揭秘四:电商平台的物流管理系统 电商技术揭秘五:电商平台…...
云原生:5分钟了解一下Kubernetes是什么
在当今的云计算时代,容器化技术变得越来越重要。它能够帮助开发者更高效地部署和管理应用程序。而Kubernetes,作为容器编排领域的领军者,正逐渐成为企业构建和管理云原生应用的核心工具。 近期将持续为大家分享Kubernetes相关知识ÿ…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
