Fast Gradient Sign Attack(FGSM)

Fast Gradient Sign Attack(FGSM)用于生成对抗样本

算法原理参考:https://blog.csdn.net/ilalaaa/article/details/105963778

在现实生活中,往往改动一小部分数据将会对model的结果产生巨大的影响,那么我们需要将这种微小的变化考虑进model中,增强model的泛化能力。我们可以自主生成对抗样本,让model基于对抗样本和训练样本学习。

代码解释参考:https://blog.csdn.net/hg_zhh/article/details/100155785

github源码主要实现利用FGSM生成对抗样本,比较在不同ε下FGSM的攻击效果,最后绘图呈现结果。

github地址:https://github.com/fanjiarong2343/CNN_FGSM

关键代码
CNN神经网络构建:

class Net(nn.Module):def __init__(self, num_classes=10):super(Net, self).__init__()self.layer1 = nn.Sequential(nn.Conv2d(1, 16, kernel_size=5, stride=1, padding=2),nn.BatchNorm2d(16),  # https://blog.csdn.net/bigFatCat_Tom/article/details/91619977 卷积层之后添加BatchNorm2d进行数据的归一化处理,这使得数据在进行Relu之前不会因为数据过大而导致网络性能的不稳定nn.ReLU(),nn.MaxPool2d(kernel_size=2, stride=2))self.layer2 = nn.Sequential(nn.Conv2d(16, 32, kernel_size=5, stride=1, padding=2),nn.BatchNorm2d(32),nn.ReLU(),nn.MaxPool2d(kernel_size=2, stride=2))self.fc = nn.Linear(7 * 7 * 32, num_classes)def forward(self, x):out = self.layer1(x)out = self.layer2(out)out = out.reshape(out.size(0), -1)out = self.fc(out)return F.log_softmax(out, dim=1)  # https://blog.csdn.net/qq_28418387/article/details/95918829

FGSM算法:

def fgsm_attack(image, epsilon, data_grad):"""获取扰动图片:param image: 原始图片:param epsilon: 扰动量:param data_grad: 损失梯度:return:"""sign_data_grad = data_grad.sign()  # 获取梯度的符号perturbed_image = image + epsilon * sign_data_gradperturbed_image = torch.clamp(perturbed_image, 0, 1)  # 将数值裁剪到0-1的范围内return perturbed_image

结论
Figure_1

Figure_2

Figure_3

基于手写数字识别的FGSM相关推荐

  1. 深度学习案例之基于 CNN 的 MNIST 手写数字识别

    一.模型结构 本文只涉及利用Tensorflow实现CNN的手写数字识别,CNN的内容请参考:卷积神经网络(CNN) MNIST数据集的格式与数据预处理代码input_data.py的讲解请参考 :T ...

  2. 开根号的笔算算法图解_机器学习KNN算法之手写数字识别

    1.算法简介 手写数字识别是KNN算法一个特别经典的实例,其数据源获取方式有两种,一种是来自MNIST数据集,另一种是从UCI欧文大学机器学习存储库中下载,本文基于后者讲解该例. 基本思想就是利用KN ...

  3. 经典实战案例:用机器学习 KNN 算法实现手写数字识别 | 原力计划

    作者 | 奶糖猫 来源 | CSDN 博客,责编 | 夕颜 头图 | CSDN 下载自视觉中国 出品 | CSDN(ID:CSDNnews) 算法简介 手写数字识别是KNN算法一个特别经典的实例,其数 ...

  4. 机器学习笔记——从手写数字识别开始

    文章目录 前言 关于这篇博客(预计八月下旬全部完成) 关于项目实现 监督学习 ANN全连接神经网络的实现 1.总述 2.初始化 3.传播及损失 4.反向传播 决策树以及随机森林的实现 1.总述 2.单 ...

  5. 手写数字识别画板前后端实现 | Flask+深度神经网络

    1. 系统概要 手写数字识别画板系统,按照MVC原则开发,主要由两部分组成:交互界面(视图View)部分是传统的HTML +CSS+JS网页(这同样也是一种遵循MVC开发方式):手写数字识别部分(模型 ...

  6. 使用Keras训练Lenet网络来进行手写数字识别

    使用Keras训练Lenet网络来进行手写数字识别 这篇博客将介绍如何使用Keras训练Lenet网络来进行手写数字识别. LeNet架构是深度学习中的一项开创性工作,演示了如何训练神经网络以端到端的 ...

  7. keras库的安装及使用,以全连接层和手写数字识别MNIST为例

    1.什么是keras 什么是keras? keras以TensorFlow和Theano作为后端封装,是一个专门用于深度学习的python模块. 包含了全连接层,卷积层,池化层,循环层,嵌入层等等等, ...

  8. pyTorch入门(六)——实战Android Minist OpenCV手写数字识别(附源码地址)

    学更好的别人, 做更好的自己. --<微卡智享> 本文长度为4239字,预计阅读12分钟 前言 前面几篇文章实现了pyTorch训练模型,然后在Windows平台用C++ OpenCV D ...

  9. CNN学习MNIST实现手写数字识别

    CNN的实现 我们之前已经实现了卷积层和池化层,现在来组合这些层,搭建进行手写数字识别的CNN. # 初始化权重 self.params = {'W1': weight_init_std * np.r ...

  10. 手写数字图片二值化转换为32*32数组。

    最近课设外加生病,本来打算在上一篇机器学习使用k-近邻算法改进约会网站的配对效果.就打算写的一直没有时间.按照<机器学习实战>的流程,手写数字识别是kNN中的最后一部分,也是一个比较经典的 ...

最新文章

  1. 反射应用--取得类的结构
  2. coreldraw绘制兔子视频_53个CAD市政工程设计视频教程+62个图纸,3天学会制图!
  3. 如何快速出稿一个优秀APP的构图
  4. synchronized关键字原理
  5. 如何解决实际错误:配置IIS使其支持SSL加密的HTTPS,并且要求浏览器客户端证书
  6. 单片机STM8S测量电压电路_单片机设计的胶带输送机智能模糊检测系统,准确性高,胶带寿命长...
  7. JavaScript之对象序列化详解
  8. 在Windows下启动java服务
  9. EGo1下板_简单秒表
  10. 读书·2018(14本)
  11. 分析FFMPEG中H264编码流程
  12. 密码学入门(5):单向散列函数
  13. Flume或Kafka和Elasticsearch整合
  14. 飞桨首款韩女团小卡扭蛋机
  15. 光学设计ZEMAX——什么是MF、RMS均方根点半径
  16. python打印26个英文字母和数字
  17. 2021年华数杯数学建模B题进出口公司的货物装运策略求解全过程文档及程序
  18. 南华大学计算机学院团学会成员,【计算机科学与技术学院】计算机学院第九届研究生团学会换届选举会议圆满结束...
  19. 申报绿色工厂的条件和标准是什么?
  20. 详谈硬盘分区表格式MBR与GUID/GPT

热门文章

  1. KNN算法实验-采用UCI的Iris数据集和DryBean数据集
  2. 没有什么能难倒程序员,教你如何下载付费歌曲
  3. 富勒wms系统里的定时器id_【案例】全面升级的康缘药业物流系统
  4. 手把手教你使用EndNote X8 详细笔记
  5. linux 抓包教程
  6. Github上优秀的开源项目
  7. Scala下载与安装
  8. 【Unity3D】动态更换天空盒(场景不受天空盒影响 等问题)
  9. java od_OD使用教程
  10. 【数字信号处理】fft幅频特性和相频特性理解