在JavaScript中从本地文件系统加载Tensorflow js模型

use*_*313 3 javascript tensorflow tensorflow.js

我已经将keras模型转换为tensorflow json格式,并将其保存在本地计算机中。我正在尝试使用以下命令在javascript代码中加载该json模型

model = await tf.loadModel('web_model')
Run Code Online (Sandbox Code Playgroud)

但是没有加载模型。有没有办法从本地文件系统加载tensorflow json模型?

edk*_*ked 10

LoadModelfetch在引擎盖下使用。而 fetch 不能直接访问本地文件。它旨在用于获取服务器提供的文件。更多关于这里。使用浏览器加载本地文件,有两种方法,要求用户上传文件

<input type="file"/>
Run Code Online (Sandbox Code Playgroud)

或者由服务器提供文件。

在这两种情况下,tf.js提供了加载模型的方法。

  1. 通过要求用户上传文件来加载模型

html

<input type="file" id="upload-json"/>
<input type="file" id="upload-weights"/>
Run Code Online (Sandbox Code Playgroud)

js

const uploadJSONInput = document.getElementById('upload-json');
const uploadWeightsInput = document.getElementById('upload-weights');
const model = await tfl.loadModel(tf.io.browserFiles(
 [uploadJSONInput.files[0], uploadWeightsInput.files[0]]));
Run Code Online (Sandbox Code Playgroud)
  1. 使用服务器提供本地文件

为此,可以使用以下 npm 模块http-server来提供包含权重和模型的目录。可以使用以下命令安装:

 npm install http-server -g
Run Code Online (Sandbox Code Playgroud)

在目录中,可以运行以下命令来启动服务器:

http-server -c1 --cors .
Run Code Online (Sandbox Code Playgroud)

现在可以加载模型:

 // load model in js script
 (async () => {
   ...
   const model = await tf.loadFrozenModel('http://localhost:8080/model.pb', 'http://localhost:8080/weights.json')
 })()
Run Code Online (Sandbox Code Playgroud)


jaf*_*rcl 5

我知道您正在尝试在浏览器中加载模型,但是如果有人在这里尝试在Node中进行加载,方法如下:

const tf = require("@tensorflow/tfjs");
const tfn = require("@tensorflow/tfjs-node");
const handler = tfn.io.fileSystem("./path/to/your/model.json");
const model = await tf.loadModel(handler);
Run Code Online (Sandbox Code Playgroud)


小智 1

你可以尝试:

const model = await tf.models.modelFromJSON(myModelJSON)
Run Code Online (Sandbox Code Playgroud)

这是在tensorflow.org文档中

  • 您无法使用“modelFromJSON”加载分片权重(.bin 文件) (3认同)