常听做算法的同学说算法模型,那模型到底是什么呢?
具体来讲,狭义的机器学习模型或者深度学习模型是一个文件,它在经过训练后可以识别特定类型的模式。对模型进行训练后,可以使用它根据之前未见过的数据进行推理,并对这些数据进行预测。
假设你要构建一个应用程序,该应用程序可以根据用户的面部表情识别用户的情感。可以为模型提供具有特定情感标记的面部图像,对模型进行训练,然后即可在能够识别任何用户情感的应用程序中使用该模型。
问题:既然模型是一个文件,如果我拿到了一个模型文件,可以得到哪里信息?
我们以一个例子开始,在专栏的Github项目中我提供了三个model文件,分别为:
- model.h5 keras保存的模型
- model.pb TF保存的模型
- model.pt Pytorch保存的模型
大家可以去Github下载这三个文件,以供后面的练习。
首先,模型文件的泄露其实相当于有一部分的源代码泄露了。我们可以从模型文件中得到很多信息。
以model.h5为例,h5是keras支持的模型文件格式之一,它将网络结构和权重,模型训练的配置,优化器等信息都保存了下来,优点就是操作方便,缺点就是模型文件很大。keras也可以只保存权重,不保存网络结构,大家可以去了解一下。
H5文件是层次数据格式第5代的版本(Hierarchical Data Format,HDF5),它是用于存储科学数据的一种文件格式和库文件。我们可以使用工具来打开H5格式的文件,这里推荐一下HDFView。
打开model.h5之后,可以看到有模型的结构,模型的权重还有优化器的权重等信息。
单独看model_weights,H5格式是组织得非常好的一种层次结构
点击layer_names可以看到模型的层
单击查看第一层conv2d_1中的bias:0 的权重
点击optimizer_weights查看训练的信息
从被打开的模型文件中可以得到很多信息,包括
网络结构:Conv -- Conv -- MaxPool -- Dense -- Dense
优化器: Adadelta
任务: 猜测图像分类
还有更多的信息等着你自己去探索吧。总之拿到这些信息之后,想要复现这个模型是非常容易的。
那如果不是H5模型文件怎么办?那就需要手动使用框架加载并打印或者导出权重等信息。不过有个开源工具帮你解决了这个问题,并可视化出来,它就是netron。下图是它的界面:
netron现在支持很多框架保存下来的模型文件格式,通用性已经算比较好。
netron项目Github地址:
https://github.com/lutzroeder/netron
这次的练习就是用netron打开剩下的两个模型,看看能从文件中得到什么信息。
本专栏Github地址:
https://github.com/AIPwn/HackingNeuralNetworks
这是《神经网络攻防》专栏的第一篇,下一篇,我们将谈论一下怎么攻击模型的输出层,欢迎关注。