P小二 P小二
← 返回文章 AIPwn 约 8 分钟

01.模型到底是什么?

模型到底是什么,里面到底有什么?

常听做算法的同学说算法模型,那模型到底是什么呢?

具体来讲,狭义的机器学习模型或者深度学习模型是一个文件,它在经过训练后可以识别特定类型的模式。对模型进行训练后,可以使用它根据之前未见过的数据进行推理,并对这些数据进行预测。

假设你要构建一个应用程序,该应用程序可以根据用户的面部表情识别用户的情感。可以为模型提供具有特定情感标记的面部图像,对模型进行训练,然后即可在能够识别任何用户情感的应用程序中使用该模型。

问题:既然模型是一个文件,如果我拿到了一个模型文件,可以得到哪里信息?

我们以一个例子开始,在专栏的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。

H5文件是层次数据格式第5代的版本(Hierarchical Data Form

打开model.h5之后,可以看到有模型的结构,模型的权重还有优化器的权重等信息。

单独看model_weights,H5格式是组织得非常好的一种层次结构

单独看model weights,H5格式是组织得非常好的一种层次结构

点击layer_names可以看到模型的层

点击layer names可以看到模型的层

单击查看第一层conv2d_1中的bias:0 的权重

单击查看第一层conv2d 1中的bias:0 的权重

点击optimizer_weights查看训练的信息

点击optimizer weights查看训练的信息

从被打开的模型文件中可以得到很多信息,包括

网络结构:Conv — Conv — MaxPool — Dense — Dense

优化器:    Adadelta

任务:       猜测图像分类

还有更多的信息等着你自己去探索吧。总之拿到这些信息之后,想要复现这个模型是非常容易的。

那如果不是H5模型文件怎么办?那就需要手动使用框架加载并打印或者导出权重等信息。不过有个开源工具帮你解决了这个问题,并可视化出来,它就是netron。下图是它的界面:

那如果不是H5模型文件怎么办?那就需要手动使用框架加载并打印或者导出权重等信息。

netron现在支持很多框架保存下来的模型文件格式,通用性已经算比较好。

netron项目Github地址:

https://github.com/lutzroeder/netron

这次的练习就是用netron打开剩下的两个模型,看看能从文件中得到什么信息。

本专栏Github地址: 

https://github.com/AIPwn/HackingNeuralNetworks

这是《神经网络攻防》专栏的第一篇,下一篇,我们将谈论一下怎么攻击模型的输出层,欢迎关注。

往期回顾:

文本对抗攻击工具:OpenAttack试用

DeepFake系列——TweepFake:DeepFake推文检测

(选学)神经网络攻防 | 机器学习预备知识(一)

开篇词——你所不知道的神经网络攻防

开篇词——你所不知道的神经网络攻防