# GAN 系列的探索与pytorch实现 (数字对抗样本生成)
- [GAN 系列的探索与pytorch实现 (数字对抗样本生成)](#GAN-系列的探索与pytorch实现-数字对抗样本生成)
- [GAN的简单介绍](#GAN的简单介绍)
- [生成对抗网络 GAN 的基本原理](#生成对抗网络-GAN-的基本原理)
- [大白话版本](#大白话版本)
- [非大白话版本](#非大白话版本)
- [数字对抗样本产生](#数字对抗样本产生)
- [步骤1:用LeNet网络完成手写数字识别任务。](#步骤1:用LeNet网络完成手写数字识别任务。)
- [ LeNet 网络](#-LeNet-网络)
- [数据集的下载和预处理](#数据集的下载和预处理)
- [Image displaying](#Image-displaying)
- [pytorch 搭建LeNet](#pytorch-搭建LeNet)
- [LetNet 训练](#LetNet-训练)
- [超参数的设置](#超参数的设置)
- [训练及测试模型](#训练及测试模型)
- [可视化误差曲线,准确率曲线](#可视化误差曲线,准确率曲线)
- [结果可视化,查看每一类的准确率](#结果可视化,查看每一类的准确率)
- [print images](#print-images)
- [模型的保存与加载](#模型的保存与加载)
- [步骤2:生成针对该网络的对抗样本。](#步骤2:生成针对该网络的对抗样本。)
- [威胁模型](#威胁模型)
- [快速梯度符号攻击](#快速梯度符号攻击)
- [定义扰动上限 epsilons](#定义扰动上限-epsilons)
- [被攻击的模型](#被攻击的模型)
- [定义我们正在使用的设备](#定义我们正在使用的设备)
- [FGSM 攻击方式](#FGSM-攻击方式)
- [FGSM算法攻击代码](#FGSM算法攻击代码)
- [测试函数](#测试函数)
- [启动攻击](#启动攻击)
- [对每个epsilon运行测试](#对每个epsilon运行测试)
- [对抗结果](#对抗结果)
- [准确性 vs Epsilon](#准确性-vs-Epsilon)
- [样本对抗性示例](#样本对抗性示例)
- [在每个epsilon上绘制几个对抗样本的例子](#在每个epsilon上绘制几个对抗样本的例子)
- [总结](#总结)
## GAN的简单介绍
**生成对抗网络**(英语:**G**enerative **A**dversarial **N**etwork,简称GAN)是`非监督式学习`的一种方法,通过让两个`神经网络`相互`博弈`的方式进行学习。该方法由[伊恩·古德费洛](https://zh.wikipedia.org/wiki/伊恩·古德费洛)等人于2014年提出。生成对抗网络由一个生成网络与一个判别网络组成。生成网络从潜在空间(latent space)中随机取样作为输入,其输出结果需要尽量模仿训练集中的真实样本。判别网络的输入则为真实样本或生成网络的输出,其目的是将生成网络的输出从真实样本中尽可能分辨出来。而生成网络则要尽可能地欺骗判别网络。两个网络相互对抗、不断调整参数,最终目的是使判别网络无法判断生成网络的输出结果是否真实。
生成对抗网络常用于生成以假乱真的图片。此外,该方法还被用于生成影片、三维物体模型等。
虽然生成对抗网络原先是为了无监督学习提出的,它也被证明对`半监督学习、完全监督学习、强化学习`是有用的。在一个2016年的研讨会,`杨立昆`描述生成式对抗网络是“`机器学习这二十年来最酷的想法`”。
若想仔细的了解一下,具体的介绍和应用都在[一文看懂「生成对抗网络 - GAN」基本原理+10种典型算法+13种应用](https://blog.csdn.net/weixin_45508265/article/details/115446736)中有详细的介绍
## 生成对抗网络 GAN 的基本原理
### 大白话版本
知乎上有一个很不错的解释,大家应该都能理解:
假设一个城市治安混乱,很快,这个城市里就会出现无数的小偷。在这些小偷中,有的可能是盗窃高手,有的可能毫无技术可言。假如这个城市开始整饬其治安,突然开展一场打击犯罪的「运动」,警察们开始恢复城市中的巡逻,很快,一批「学艺不精」的小偷就被捉住了。之所以捉住的是那些没有技术含量的小偷,是因为警察们的技术也不行了,在捉住一批低端小偷后,城市的治安水平变得怎样倒还不好说,但很明显,城市里小偷们的平均水平已经大大提高了。
![警察严打导致小偷水平提升](https://easy-ai.oss-cn-shanghai.aliyuncs.com/2019-07-16-xt-tg.png)
警察们开始继续训练自己的破案技术,开始抓住那些越来越狡猾的小偷。随着这些职业惯犯们的落网,警察们也练就了特别的本事,他们能很快能从一群人中发现可疑人员,于是上前盘查,并最终逮捕嫌犯;小偷们的日子也不好过了,因为警察们的水平大大提高,如果还想以前那样表现得鬼鬼祟祟,那么很快就会被警察捉住。
![经常提升技能,更多小偷被抓](https://easy-ai.oss-cn-shanghai.aliyuncs.com/2019-07-16-jc-tg.png)
为了避免被捕,小偷们努力表现得不那么「可疑」,而魔高一尺、道高一丈,警察也在不断提高自己的水平,争取将小偷和无辜的普通群众区分开。随着警察和小偷之间的这种「交流」与「切磋」,小偷们都变得非常谨慎,他们有着极高的偷窃技巧,表现得跟普通群众一模一样,而警察们都练就了「火眼金睛」,一旦发现可疑人员,就能马上发现并及时控制——最终,我们同时得到了最强的小偷和最强的警察。
![同时得到了最强的小偷和最强的警察](https://easy-ai.oss-cn-shanghai.aliyuncs.com/2019-07-16-tg.png)
### 非大白话版本
生成对抗网络(GAN)由2个重要的部分构成:
1. **生成器(Generator**):通过机器生成数据(大部分情况下是图像),目的是“骗过”判别器
2. **判别器(Discriminator**):判断这张图像是真实的还是机器生成的,目的是找出生成器做的“假数据”
![生成对抗网络GANs由生成器和判别器构成](https://easy-ai.oss-cn-shanghai.aliyuncs.com/2019-07-16-2bf-1.png)
下面详细介绍一下过程:
**第一阶段:固定「判别器D」,训练「生成器G」**
我们使用一个还 OK 判别器,让一个「生成器G」不断生成“假数据”,然后给这个「判别器D」去判断。
一开始,「生成器G」还很弱,所以很容易被揪出来。
但是随着不断的训练,「生成器G」技能不断提升,最终骗过了「判别器D」。
到了这个时候,「判别器D」基本属于瞎猜的状态,判断是否为假数据的概率为50%。
![固定判别器,训练生成器](https://easy-ai.oss-cn-shanghai.aliyuncs.com/2019-07-16-g-tg.png)
**第二阶段:固定「生成器G」,训练「判别器D」**
当通过了第一阶段,继续训练「生成器G」就没有意义了。这个时候我们固定「生成器G」,然后开始训练「判别器D」。
「判别器D」通过不断训练,提高了自己的鉴别能力,最终他可以准确的判断出所有的假图片。
到了这个时候,「生成器G」已经无法骗过「判别器D」。
![固定生成器,训练判别器](https://easy-ai.oss-cn-shanghai.aliyuncs.com/2019-07-16-d-tg-1.png)
**循环阶段一和阶段二**
通过不断的循环,「生成器G」和「判别器D」的能力都越来越强。
最终我们得到了一个效果非常好的「生成器G」,我们就可以用它来生成我们想要的图片了。
下面的实际应用部分会展示很多“惊艳”的案例。
![循环训练,2遍越来越强](https://easy-ai.oss-cn-shanghai.aliyuncs.com/2019-07-16-xh.png)
如果对 GAN 的详细技术原理感兴趣,可以看看下面2篇文章:
《[生成性对抗网络(GAN)初学者指南 – 附代码](https://easyai.tech/blog/generative-a
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
利用GAN的思想,进行数字对抗样本生成,以LeNet作为图像分类模型,LeNet是一个小型的神经网络结构,仅包含两层卷积层、两个池化层以及三层全连接。该轻量级网络能快速、占内存小、高精确度的解决复杂度比较低的问题,如手写数字识别。 (步骤1)用LeNet网络完成手写数字识别任务。 (步骤2)利用对抗样本工具包生成针对该网络的对抗样本。 整体包括一下部分 步骤1:用`LeNet网络`完成手写数字识别任务。 LeNet 网络 数据集的下载和预处理 Image displaying pytorch 搭建LeNet LetNet 训练 超参数的设置 训练及测试模型 可视化误差曲线,准确率曲线 结果可视化,查看每一类的准确率 模型的保存与加载 步骤2:生成针对该网络的对抗样本。 威胁模型 快速梯度符号攻击 定义扰动上限 epsilons 被攻击的模型 FGSM 攻击方式 测试函数 启动攻击 对抗结果 准确性 vs Epsilon 样本对抗性示例
资源推荐
资源详情
资源评论
收起资源包目录
数字对抗样本生成.zip (5个子文件)
数字对抗样本生成
mnist_net2.pth 247KB
LeNet.ipynb 217KB
生成对抗样本.ipynb 181KB
mnist_net.pth 247KB
README.md 39KB
共 5 条
- 1
风信子的猫Redamancy
- 粉丝: 1w+
- 资源: 50
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页