tfjs_layers_model 和 tfjs_graph_model 的区别

Posted

技术标签:

【中文标题】tfjs_layers_model 和 tfjs_graph_model 的区别【英文标题】:Difference between tfjs_layers_model and tfjs_graph_model 【发布时间】:2019-09-13 16:35:27 【问题描述】:

tensorflowjs converter 有输出格式

tfjs_layers_model,tfjs_graph_model

这两者有什么区别?有使用推荐吗?

【问题讨论】:

【参考方案1】:

似乎只有某些输入和输出格式对有效,namely

`keras` | `tfjs_layers_model` 
`keras_saved_model` | `tfjs_layers_model`
`tf_hub` | `tfjs_graph_model`
`tf_saved_model` | `tfjs_graph_model`

【讨论】:

【参考方案2】:

这方面的信息似乎分散在下面链接的几个存储库和网站上,所以我已经完成了侦探工作?。


TFJS 的 2 种格式

TensorFlow.js 层模型:JSON + 二进制权重文件,具有有限的 (Keras) 功能。在这种情况下,权重似乎是可选的。 而来自 TensorFlow JS docs,

此模式不适用于 TensorFlow SavedModels 或其转换后的形式。对于这些模型,请使用 tf.loadGraphModel()。加载的模型支持原始 keras 或 tf.keras 模型的完整推理和训练(例如迁移学习)功能。

TensorFlow.js 图模型: JSON + 二进制权重文件,具有转换 to/ from SavedModel,但没有训练能力。关于图模型,README 说:

加载的模型仅支持推理,但推理的速度通常比 tfjs_layers_model(见上一行)更快,这要归功于 TensorFlow 执行的图形优化。此转换路线的另一个限制是它尚不支持某些层类型(例如,循环层,如 LSTM)。

JSON 文件包含的位置:

元数据(格式:'graph-model',convertedBy:“TensorFlow.js Converter v1.1.2”,generatedBy:“2.0.0-dev20190603”) modelTopology:描述所有节点(Relu、Conv2D 偏差、Conv2D 权重)以及它们之间的关系。 weightsManifest:权重文件可以分成多个文件(例如group1-shard1of2.bingroup1-shard2of2.bin 或对于 ResNet,group1-shard9of12.bin

什么时候应该保存到图层模型?

永远不会!始终保存到 SavedModel,并在 TFJS 需要时转换为图形模型。在 Tensorflow 2 中,所有内容都可以保存到 SavedModel 中,而这些不能转换为层模型(只是不支持),而只能是 图形模型。您也更有可能在 Internet 上找到 SavedModel,而不是 keras_saved_model。 (这是TFHub 的标准格式)。 保持简单,保存到 SavedModel,如果需要在 TFJS 中转换为图形模型,TensorFlow 团队似乎也建议使用 SavedModel,根据 YouTube 上的this slide。

我认为图层格式是 Keras 可以输出到 SavedModel 之前的“首选”格式。现在,您只需保存到 SavedModel 并将模型转换为图形模型格式。 Google 发布的 tensorflow.js 模型似乎也都是图模型格式。我找不到一层模型。

TensorFlow.js 层目前仅支持使用标准 Keras 构造的 Keras 模型。 source, and example usage of layer models

不幸的是,这些图模型无法转回.tflite。如果有人知道怎么做,请告诉我!

【讨论】:

以上是关于tfjs_layers_model 和 tfjs_graph_model 的区别的主要内容,如果未能解决你的问题,请参考以下文章

使用 face-api.js 包 (node.js) 时导入 @tensorflow/tfjs-node 的问题

tfjs-examples / date-conversion-attention中使用的注意力模型是什么?

TFJS中渴望风格的性能成本是多少?

使用 tensorflowjs 项目运行 yarn watch 时出错

Tensorflowjs - 将 4d 张量重塑/切片成图像

无法安装tensorflow.js