TensorFlow 教程 #11 - 对抗样本

TensorFlow 教程 #11 - 对抗样本

注:作者未提供教程#10,以后若有更新将补充。


本文主要演示了如何给图像增加“对抗噪声”,以此欺骗模型,使其误分类。

01 - 简单线性模型/ 02 - 卷积神经网络/ 03 - PrettyTensor/ 04 - 保存 & 恢复

05 - 集成学习/ 06 - CIFAR-10/ 07 - Inception 模型/ 08 - 迁移学习

09 - 视频数据

by Magnus Erik Hvass Pedersen / GitHub / Videos on YouTube

中文翻译 thrillerist/Github

如有转载,请附上本文链接。__________________________________________________________________________


介绍

之前的教程中,我们用几种不用的深度神经网络来分类图像,取得不同程度的成功。在这篇教程里,我们将会看到一个寻找对抗样本的简单方法,它会使一个最先进的神经网络误分类任何输入图像,不管选的是什么类别。这通过简单地向输入图像添加小部分“特定”噪声完成。人类不会觉察到这些变化,但它却能戏弄神经网络。

本文基于之前的教程。你需要大概地熟悉神经网络(教程#01#02),了解Inception模型(教程#07)也很有帮助。


流程图

我们使用教程#07中的Inception模型,然后修改/黑掉TensorFlow图,来寻找引起Inception模型误分类输入图像的对抗样本。

在下面的流程图中,我们在《查理和巧克力工厂》图像上添加了一些噪声,然后作为Inception模型的输入。最终目标是找到使Inception模型将图像误分类成我们目标类型的噪声,这边选择书柜类型(分类号300)。

我们也为图添加一个新的损失函数,来计算cross-entropy,它是Inception模型分类噪声图像的性能度量。

由于Inception模型是由很多相结合的基本数学运算构造的,使用微分链式法则,TensorFlow让我们很快就能找到损失函数的梯度。

我们使用损失函数关于输入图像的梯度,来寻找对抗噪声。要寻找的是那些可以增加'书柜'类别而不是输入图像原始类别的评分(即概率)的噪声。

这本质上是用梯度下降法来执行优化的,后面会实现它。


from IPython.display import Image, display
Image('images/11_adversarial_examples_flowchart.png')

导入

%matplotlib inline
import matplotlib.pyplot as plt
import tensorflow as tf
import numpy as np
import os

# Functions and classes for loading and using the Inception model.
import inception

使用Python3.5.2(Anaconda)开发,TensorFlow版本是:


tf.__version__
'0.11.0rc0'

Inception 模型

从网上下载Inception模型

从网上下载Inception模型。这是你保存数据文件的默认文件夹。如果文件夹不存在就自动创建。


# inception.data_dir = 'inception/'

如果文件夹中不存在Inception模型,

发布于 2017-06-04 22:28