在Breaking Linear Classifiers on ImageNet博客文章中,作者提供了一个非常简单的示例,介绍如何修改图像以欺骗分类器。给出的技术非常简单:xad = x + 0.5w
其中x是1d向量,w是1d权重。这一切都很好而且清晰。但是,我试图用MNIST数据集实现这个并且卡住了,不知道如何将这个简单的想法变成实际的结果。我想知道如何使用已知的w
矩阵来修改给定的x
矩阵(或简单地修平的1d图像矢量)。
我的图像矩阵x
具有形状(1032,784)(每个图像是具有784个数字的展平向量),并且我的权重矩阵w
具有形状(784,10)。那么问题是如何实现上述文章中介绍的想法?特别是,如何为所有图像添加一点重量?像这样:
x + 0.5 * w
我的代码can be found on GitHub。使用numpy的解决方案是首选,但使用TensorFlow也可以。谢谢!
答案 0 :(得分:2)
弄清楚如何:
因此,如果我们尝试将对手图像错误地分类为" 6",我们需要获取" 6"仅来自权重矩阵:
w_six = w[:, 6]
然后我们可以简单地添加矩阵:
images_fool = x + 1.5 * w_six