【问题标题】:How to download models and weights from tensorflow.js如何从 tensorflow.js 下载模型和权重
【发布时间】:2019-01-06 21:16:49
【问题描述】:

我正在尝试下载一个包含权重的预训练 tensorflow.js 模型,以便在标准版 tensorflow 中的 python 中离线使用,作为无论如何都不是处于早期阶段的项目的一部分,因此切换到 tensorflow .js 是不可能的。 但我不知道如何下载这些模型,以及是否有必要对模型进行一些转换。

我知道在 javascript 中我可以访问模型并通过像这样调用它们来使用它们 但是如果是这样的话,我该如何真正冻结 .ckpt 文件或模型呢?

<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@0.13.3"></script>

<script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/posenet@0.2.3"></script>

我的最终目标是获取冻结的模型文件,并像在正常版本的 tensorflow 中一样获得输出。 这也将在离线环境中使用,因此任何在线参考都没有用。

感谢您的回复

【问题讨论】:

  • 我想知道你为什么要在 js 中创建模型并在 python 中导出它。为什么阻止你直接在 python 中创建模型?
  • 不,我不想创建一个新的,我想下载一个训练有素的,抱歉我不清楚
  • @edkeveked — OP 希望使用 Python 环境中经过全面训练的模型并因此询问如何直接下载模型权重,这不是很清楚吗?
  • @Boris 你找到解决方案了吗?我在这里寻找完全相同的东西。

标签: javascript tensorflow machine-learning tensorflow.js


【解决方案1】:

可以通过调用模型的方法save来保存模型拓扑及其权重。

const model = tf.sequential();
model.add(tf.layers.dense(
     {units: 1, inputShape: [10], activation: 'sigmoid'}));
const saveResult = await model.save('downloads://mymodel');
// This will trigger downloading of two files:
//   'mymodel.json' and 'mymodel.weights.bin'.
console.log(saveResult);

根据保存模型的位置及其权重(localStorage、IndexDB、...),有不同的方案字符串。 doc

【讨论】:

  • const model = posenet; const saveResult = model.save('downloads://mymodel'); console.log(saveResult); 尝试过类似的方法但不起作用,例如如何将posenet分配给变量模型?
  • 如果您正在寻找使脚本脱机的方法,只需将脚本复制到此处cdn.jsdelivr.net/npm/@tensorflow/tfjs@0.13.3 并将其粘贴到本地 js 文件中。并更改以下内容:&lt;script src="path to local file"&gt;
  • 谢谢,但我不想让脚本离线,我正在尝试获得预训练模型,包括权重,作为 tensorflow.js 的演示托管,离线
  • 我想知道您是否正在寻找要下载的权重文件的 url。这是一个posenet架构的manifest.json:storage.googleapis.com/tfjs-models/weights/posenet/…。如果您想设置自己的服务器,这是一种加载文件的方法:github.com/oveddan/posenet-for-installations。但是我不知道该项目的许可证是否允许在本地托管这些文件
  • 是的,这有帮助,但仍然不知道如何下载该模型的权重
【解决方案2】:

我去了https://storage.googleapis.com/tfjs-models/,找到了列出所有文件的目录。我找到了相关文件(我想要所有的 mobilenet 浮动,而不是量化的 mobileNet),并填充了这个 file_uris 列表。

base_uri = "https://storage.googleapis.com/tfjs-models/"
file_uris = [
    "savedmodel/posenet/mobilenet/float/050/group1-shard1of1.bin",
    "savedmodel/posenet/mobilenet/float/050/model-stride16.json",
    "savedmodel/posenet/mobilenet/float/050/model-stride8.json",
    "savedmodel/posenet/mobilenet/float/075/group1-shard1of2.bin",
    "savedmodel/posenet/mobilenet/float/075/group1-shard2of2.bin",
    "savedmodel/posenet/mobilenet/float/075/model-stride16.json",
    "savedmodel/posenet/mobilenet/float/075/model-stride8.json",
    "savedmodel/posenet/mobilenet/float/100/group1-shard1of4.bin",
    "savedmodel/posenet/mobilenet/float/100/group1-shard2of4.bin",
    "savedmodel/posenet/mobilenet/float/100/group1-shard3of4.bin",
    "savedmodel/posenet/mobilenet/float/100/model-stride16.json",
    "savedmodel/posenet/mobilenet/float/100/model-stride8.json"
]

然后我使用 python 将文件迭代下载到它们的相同文件夹中。

from urllib.request import urlretrieve
import requests
from pathlib import Path

for file_uri in file_uris:
    uri = base_uri + file_uri
    save_path = "/".join(file_uri.split("/")[:-1])
    Path(save_path).mkdir(parents=True, exist_ok=True)
    urlretrieve(uri, file_uri)
    print(path, file_uri)

在试验这段代码时,我喜欢 Jupyter Lab(Jupyter Notebook 也不错)。

这样,您将获得一个包含 bin 文件(权重)和 json 文件(图形模型)的文件夹。不幸的是,这些是图模型,因此它们不能转换为 SavedModel,因此它们对您来说绝对没用。如果有人找到在常规 TensorFlow(最好是 2.0+)中运行这些 tfjs 图模型文件的方法,请告诉我。


您还可以从 TFHub 下载带有“整个”模型的 zip 文件,例如,一个 2 字节量化的 ResNet PoseNet 可用here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多