tfjs_layers_model 和 tfjs_graph_model 的区别

ser*_*inc 7 tensorflow tensorflow.js tensorflowjs-converter

tensorflowjs converter有输出格式

tfjs_layers_model, tfjs_graph_model

两者有什么区别?有使用建议吗?

Ben*_*rth 6

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


2 TFJS 格式

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

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

TensorFlow.js图模型: JSON +二进制权文件(S),与转换/SavedModel,但没有训练能力。关于图模型,自述文件说:

加载的模型仅支持推理,但由于 TensorFlow 执行的图形优化,推理速度通常比 tfjs_layers_model(见上一行)更快。这种转换路线的另一个限制是它还不支持某些层类型(例如,循环层,如 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 中转换为图形模型,根据YouTube 上的这张幻灯片 TensorFlow 团队似乎也推荐使用 SavedModel 。

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

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

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