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

时间:2018-12-05 20:02:55

标签: javascript tensorflow tensorflow.js

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

model = await tf.loadModel('web_model')

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

10 个答案:

答案 0 :(得分:4)

我知道您正在尝试在浏览器中加载模型,但是如果有人在此尝试在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);

答案 1 :(得分:1)

LoadModel在后​​台使用fetch。并且获取无法直接访问本地文件。它旨在用于获取服务器提供的文件。有关here的更多信息。 要使用浏览器加载本地文件,有两种方法,要求用户使用

上传文件
<input type="file"/>

或由服务器提供文件。

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

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

html

<input type="file" id="upload-json"/>
<input type="file" id="upload-weights"/>

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]]));
  1. 使用服务器提供本地文件

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

 npm install http-server -g

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

http-server -c1 --cors .

现在可以加载模型了:

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

答案 2 :(得分:0)

您可以尝试:

const model = await tf.models.modelFromJSON(myModelJSON)

Here it is in the tensorflow.org docs

答案 3 :(得分:0)

查看我们的文档以获取模型:https://js.tensorflow.org/api/latest/#Models-Loading

您可以使用tf.loadModel接受一个字符串,该字符串是模型定义的URL,需要通过HTTP进行提供。这意味着您需要启动一个http服务器来提供这些文件(由于CORS,它不允许您向文件系统发出请求)。

此软件包可以为您做到这一点:npmjs.com/package/http-server

答案 4 :(得分:0)

const tf = require('@tensorflow/tfjs');
const tfnode = require('@tensorflow/tfjs-node');

async function loadModel(){
    const handler = tfnode.io.fileSystem('tfjs_model/model.json');
    const model = await tf.loadLayersModel(handler);
    console.log("Model loaded")
}


loadModel();

这在节点上对我有用。感谢jafaircl

答案 5 :(得分:0)

您可以使用不安全的Chrome实例:

sleep

比您可以添加此脚本来重新定义获取功能

C:\Program Files (x86)\Google\Chrome\Application>chrome.exe --disable-web-security --disable-gpu --user-data-dir=C:/Temp

然后确保使用正确的模型加载器 my comment about loader issue

但是您的权重将不正确-据我了解,存在一些编码问题。

答案 6 :(得分:0)

如果您尝试将其加载到服务器端,请使用@tensorflow/tfjs-node而不是@tensorflow/tfjs并更新到0.2.1或更高版本以解决此问题。

答案 7 :(得分:0)

我正在使用React js加载模型(用于图像分类和更多机器学习内容)

Tensorflow.js不支持Api来读取以前训练有素的模型

    const file= new Blob()
    file.src=modelJSON
    const files= new Blob()
    files.src=modelWeights
    console.log(files)
    const model= await tf.loadLayersModel(tf.io.browserFiles([file, files]));

[![在此处输入图片描述] [1]] [1]

如果您使用网络应用程序(对于tensorflow.lite,可以使用opencv.readTensorflowmodel(model.pb),则可以在Express.js中创建APi来为模型(model.json和weigths.bin)提供服务器服务,weight.pbtxt)

参考:How to load tensorflow-js weights from express using tf.loadLayersModel()?

     const classifierModel = await tf.loadLayersModel(            
            "https://rp5u7.sse.codesandbox.io/api/pokeml/classify"
        ); 
        const im = new Image()
            im.src =imagenSample//'../../../../../Models/ShapesClassification/Samples/images (2).png';
        const abc= this.preprocessImage(im);
const preds = await classifierModel.predict(abc)//.argMax(-1);
            console.log('<Response>',preds,'Principal',preds.shape[0],'DATA',preds.dataSync())
            const responde=[...preds.dataSync()]
            console.log('Maxmimo Valor',Math.max.apply(Math, responde.map(function(o) { return o; })))
            let indiceMax = this.indexOfMax(responde)
            console.log(indiceMax)
            console.log('<<<LABEL>>>',this.labelsReturn(indiceMax))

答案 8 :(得分:0)

如果您正在使用 Django,您应该:

  1. 在您的应用中创建一个目录 static 并将您的模型放在那里。

  2. 将该静态目录加载到您要使用模型的模板中:

    var modelPath = "{% static 'sampleModel.json' %}">
    

不要忘记加载 tensorflow.js 库:

<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs"></script>
  1. 现在您可以加载模型了:

    <script>model = await tf.loadGraphModel(modelPath)</script>
    

答案 9 :(得分:0)

如果您将 React 与 create-react-app 一起使用,您可以将保存的模型文件保存在您的 public folder 中。

例如,假设您要使用 blazeface model。你会

  1. Download the .tar.gz model 来自该网页。

  2. 将模型解压到应用程序的公共目录中。所以现在您在公共子目录中拥有来自 .tar.gz 文件的文件:

    %YOUR_APP%/public/blazeface_1_default_1/model.json
    %YOUR_APP%/public/blazeface_1_default_1/group1-shard1of1.bin
    
  3. 使用

    在您的 React 应用程序中加载模型
    tf.loadGraphModel(process.env.PUBLIC_URL + 'blazeface_1_default_1/model.json'