是否存在神经网络的通用格式

时间:2015-11-20 14:19:19

标签: neural-network theano deep-learning caffe torch

不同的团队使用不同的库来训练和运行神经网络(caffe,torch,theano ......)。这使共享变得困难:每个库都有自己的存储网络格式,每次要测试其他团队的工作时都必须安装新库。

我正在寻找解决方案,使这不那么乏味: - 是否有一个首选(共享?)格式来存储神经网络? - 是否有服务或库可以帮助处理不同类型的网络/或将一种类型转换为另一种类型?

谢谢!

2 个答案:

答案 0 :(得分:11)

  

是否存在首选(共享?)格式来存储神经网络?

每个库/框架都有自己的序列化,例如Caffe使用Protocol Buffers,Torch有built-in serialization scheme,Theano对象可以是serialized with pickle

在某些情况下,例如OverFeatdarknet,权重和偏差通过相应fwrite(或{{的float - s的二进制格式存储在磁盘上{1}})连续数组(有关详细信息,请参阅this answer)。请注意,这不包括必须单独知道或表示的网络/模型的体系结构(如declared explicitly at load time)。

此外:像libccv这样的库将结构和权重存储在SQLite database中。

  

是否有服务或库可以帮助处理不同类型的网络/或将一种类型转换为另一种类型?

我认为没有一个(meta)图书馆声称这样做。但它存在不同的项目,提供方便的转换器。

一些例子(非详尽无遗):

-

更新(2017-09):两个值得注意的举措是:

(1)ONNX格式(a.k.a.开放神经网络交换):

  

[...]表示深度学习模型的标准,使模型能够在框架之间传递

请参阅这些blog posts

(2)Apple引入的CoreML格式:

  

[...]广泛的ML方法的公共文件格式(double)[...]此格式的模型可以通过Xcode直接集成到应用程序中。

答案 1 :(得分:5)

ONNX(开放神经网络交换)

ONNX 是一个开放源代码的AI生态系统,为神经网络提供了通用格式

  • 它有助于转换为深度学习模型。

    通常,在没有 ONNX 的情况下,模型转换需要数周/数月的时间:

    ONNX 提供了更简单,更快速的转换过程:

    有关所有受支持的转换,请参见here

  • 它使部署更加容易,并且以一种更可取的方式存储模型: enter image description here 在上图中,ONNX充当数据提取层,将每个输入模型转换为相同格式。否则,所有模型都将像一堆彼此不匹配的拼图。


如何使用ONNX-Keras转换示例

假设您拥有 Keras 模型,并且要将其转换为 ONNX

model = load_model("keras_model.hdf5")  # h5 is also OK!

onnx_model = keras2onnx.convert_keras(model, model.name)

onnx_model_file = 'output_model.onnx'
onnx.save_model(onnx_model, onnx_model_file)

然后加载并运行保存的模型:

onnx_model = onnx.load_model('output_model.onnx')

content = onnx_model.SerializeToString()
sess = onnxruntime.InferenceSession(content)
x = x if isinstance(x, list) else [x]
feed = dict([(input.name, x[n]) for n, input in enumerate(sess.get_inputs())])

# Do inference
pred_onnx = sess.run(None, feed)

此示例使用keras2onnx转换 Keras 模型,并使用onnxruntime进行推断

注意:还有许多采用ONNX格式的预训练模型。检出this


参考文献:
1。 https://towardsdatascience.com/onnx-made-easy-957e60d16e94
2。 https://blog.codecentric.de/en/2019/08/portability-deep-learning-frameworks-onnx/
3。 http://on-demand.gputechconf.com/gtc/2018/presentation/s8818-onnx-interoperable-deep-learning-presented-by-facebook.pdf
4。 https://devblogs.nvidia.com/tensorrt-3-faster-tensorflow-inference/