1

我已将我的 tensorflow 图的 model.json 文件上传到 AWS S3 存储桶上的私有存储库,现在我正在尝试使用loadGraphModel(以及权重清单值的二进制文件 group1-shard1of1)加载该图。这是我使用节点运行的代码(我将存储桶路径和签名密钥保密)

TFJSConverter = require('@tensorflow/tfjs-converter')
const MODEL_URL = "https://[BucketName].s3.amazonaws.com/[PathToModel]/model.json?[credentials]&[securitykey]";
global.fetch = require('node-fetch')
TFJSConverter.loadGraphModel(MODEL_URL)

但是 loadGraphModel 函数会查找以“.json”结尾的模型 url。如果没有,它会查找完整的模型 url 并检查一个名为 weights_manifest.json 的权重清单文件,没有签名。然后是一个错误请求:

UnhandledPromiseRejectionWarning:错误:请求https://[BucketName].s3.amazonaws.com/[PathToModel]/model.json?[credentials]&[securitykey],https://[BucketName].s3.amazonaws.com/ [PathToModel]/weights_manifest.json失败,状态码为 403。请验证此 URL 指向要加载的模型的模型 JSON。

我检查了签名的网址是否确实有效,是否有签名网址的解决方案?

安装版本:@tensorflow/tfjs-converter@1.1.2 node v10.15.3

非常感谢!

4

2 回答 2

2

用于加载模型的正确库是tfjs和不是tfjs-converter

let tf = require("@tensorflow/tfjs");
tf.loadGraphModel(MODEL_URL)

403error 是授权错误响应。尝试使用requestInit作为参数传递的对象在请求中设置凭据loadGraphModel

于 2019-05-09T07:39:54.883 回答
0

这对我有用:

const fetch = require('node-fetch')
global.fetch = fetch

但您也可以尝试:

const fetch = require('node-fetch')
tf.loadGraphModel(MODEL_URL, { fetchFunc: fetch } )

如文档中所述: https ://js.tensorflow.org/api/latest/#loadGraphModel

于 2020-07-13T21:53:46.170 回答