繁体   English   中英

如何从 tensorflow.js 下载模型和权重

[英]How to download models and weights from tensorflow.js

我正在尝试下载一个包含权重的预训练的 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 的正常版本中所做的那样的输出。 此外,这将用于离线环境,因此任何在线参考都没有用。

感谢您的回复

可以通过调用模型的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 等),有不同的方案字符串。 文档

我去了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 文件(图形模型)的文件夹。 不幸的是,这些是图模型,所以它们不能转换成 SavedModels,所以它们对你来说绝对没用。 如果有人找到在常规 TensorFlow(最好是 2.0+)中运行这些 tfjs 图模型文件的方法,请告诉我。


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM