8

具有tensorflowjs converter输出格式

tfjs_layers_model,tfjs_graph_model

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

4

2 回答 2

8

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


2 TFJS 的格式

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

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

TensorFlow.js 图模型: JSON + 二进制权重文件,具有与 SavedModel 之间的转换但没有训练能力。关于图模型,自述文件说:

加载的模型仅支持推理,但推理速度通常比 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 中,这些不能转换为图层模型(只是不支持),只能转换为图形模型。您也更有可能在互联网上找到 SavedModel,而不是keras_saved_model. (它是TFHub的标准格式)。保持简单,保存到 SavedModel,如果需要在 TFJS 中转换为图形模型, TensorFlow 团队似乎也建议使用 SavedModel,根据YouTube 上的这张幻灯片。

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

TensorFlow.js 层目前仅支持使用标准 Keras 构造的 Keras 模型。层模型的来源和示例用法

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

于 2020-08-27T17:40:56.860 回答
0

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

`keras` | `tfjs_layers_model` 
`keras_saved_model` | `tfjs_layers_model`
`tf_hub` | `tfjs_graph_model`
`tf_saved_model` | `tfjs_graph_model`
于 2019-04-24T11:36:33.343 回答