神经网络有通用格式吗

Posted

技术标签:

【中文标题】神经网络有通用格式吗【英文标题】:Is there a common format for neural networks 【发布时间】:2016-02-23 01:48:19 【问题描述】:

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

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

谢谢!

【问题讨论】:

【参考方案1】:

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

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

在某些情况下,例如OverFeat 或darknet,权重和偏差通过相应float(或double)连续数组的普通fwrite-s 以二进制格式存储在磁盘上(参见@ 987654326@了解更多详情)。请注意,这不包括必须单独了解或表示的网络/模型的架构(如declared explicitly at load time)。

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

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

我认为没有一个(元)库声称可以这样做。但它存在提供方便转换器的不同项目。

一些例子(非详尽):

Caffe -> 火炬:https://github.com/szagoruyko/loadcaffe 火炬->咖啡:https://github.com/facebook/fb-caffe-exts Caffe -> TensorFlow:https://github.com/ethereon/caffe-tensorflow

--

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

(1)ONNX 格式(又名开放式神经网络交换):

[...] 一种表示深度学习模型的标准,使模型能够在框架之间转移

看到这些blogposts。

(2)苹果引入的CoreML格式:

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

【讨论】:

最近的另一项举措是 Khronos Group 的 Neural Network Exchange Format。【参考方案2】:

ONNX(开放式神经网络交换)

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

它有助于深度学习模型转换为另一个。

通常,如果没有 ONNX,模型转换需要数周/数月:

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

有关所有支持的转换,请参阅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-957e60d16e942. 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.pdf4. https://devblogs.nvidia.com/tensorrt-3-faster-tensorflow-inference/

【讨论】:

以上是关于神经网络有通用格式吗的主要内容,如果未能解决你的问题,请参考以下文章

一个通用网络协议数据解析

为啥内核没有收到我的通用网络链接消息?

shinyproxy 基础知识(+ 一些通用网络知识)

波粒的网络摄像头能和海康兼容吗

tensorflow模型的保存与加载

python大神们都在用的爬虫工具,你知道几个?