接触不到代码,只有h5模型文件,keras使用模型文件来存储整个神经网络架构,包括存有权重和偏差,所以我们通过编辑来修改网络的行为。
我们希望通过更改HDF5文件来诱使模型误分类我们扔给它的任何假标识。
当然,在不破坏任何内容的情况下,我们可以对此文件进行的修改受到限制。显而易见,更改模型的输入或输出量很可能会破坏使用神经网络的代码。添加或删除层还会导致一些奇怪的结果,例如,当代码尝试修改某些超参数时发生错误。
但是,我们始终可以自由更改权重和偏差。一般修改最后一层效果最明显。
如下所示
将神经网络的输出偏差设置为一个非常大的值,其对整个网络的影响远大于权重与网络相乘的效果.
运行exercise.py,结果如下
Exercise 0-0
1.架构看起来是怎样的
官网下载hdfview,导入h5文件
展开model_weights,可以看到
有两个卷积层、两个dense层(全连接层)、1个max_pooling层等
详细如图
2.模型是如何训练的
可以看到优化器为Adadelta
3.正在做什么
可以从以下几个线索来判断
1)从training_config可以看到它用的是cateforical_crossentropy损失函数,说明是在处理分类问题
2)model_config这里看到conv2d_1的输入shape,可以推测图像的size为28*28
3)最后一层dense_2使用的激活函数是softmax,也能说明这是在做分类问题
综述所述,推测这是在做图像识别
Exercise 0-1
这个模型会以手写数字图像为输入,只有识别出数字‘4’才会给出access权限,其他数字就是会返回access denied,就像我们之前直接运行exercise.py一样。现在我们有一张为数字‘2’的图像,我们不能修改exercise.py和fake_id.png,只能修改model.h5,怎样对其进行修改才能当我们输入fake_id.png(数字‘2’的手写图像)时,可以拿到access权限呢?同时要求修改尽可能小
首先使用hdfview载入h5文件(注意:默认直接载入时是只读模式,此时无法修改,应该一read/write模式打开)
可以看到最后一层为dense_2
如图选中
将4的值设置为一个很大的正数,比如100
然后点击ok即可
此时再次运行exercise.py,将数字‘2’的图像喂给模型,从结果中可以看到此时已经活动了授权
也就是说,我们通过修改模型最后一层的参数,使得模型在测试时产生了误判