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

在javascript中从本地文件系统加载Tensorflow js模型,javascript,tensorflow,tensorflow.js,Javascript,Tensorflow,Tensorflow.js,我已将keras模型转换为tensorflow json格式,并将其本地保存在我的计算机中。我试图使用下面的命令在javascript代码中加载json模型 model = await tf.loadModel('web_model') 但是模型没有加载。 有没有办法从本地文件系统加载tensorflow json模型?您可以尝试: const model = await tf.models.modelFromJSON(myModelJSON) 查看我们的装载模型文档: 您可以使用tf.lo

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

model = await tf.loadModel('web_model')
但是模型没有加载。 有没有办法从本地文件系统加载tensorflow json模型?

您可以尝试:

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

查看我们的装载模型文档:

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


此软件包可以为您做到这一点:

LoadModel
在引擎盖下使用
fetch
。和fetch无法直接访问本地文件。它用于获取服务器提供的文件。更多关于这个。 要使用浏览器加载本地文件,有两种方法,要求用户使用

<input type="file"/>
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]]));
  • 使用服务器为本地文件提供服务
  • 要做到这一点,可以使用下面的npm模块为包含权重和模型的目录提供服务。可以使用以下命令安装它:

     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')
     })()
    

    我知道您正试图在浏览器中加载模型,但如果有人在节点中尝试加载模型,请按以下方法操作:

    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.loadLayersModel(handler);
    

    这在node中对我有效。多亏了
    jafaircl

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

    C:\Program Files (x86)\Google\Chrome\Application>chrome.exe --disable-web-security --disable-gpu --user-data-dir=C:/Temp
    
    然后您可以添加此脚本来重新定义fetch函数

    async function fetch(url) {
      return new Promise(function(resolve, reject) {
        var xhr = new XMLHttpRequest
        xhr.onload = function() {
          resolve(new Response(xhr.responseText, {status: 200}))
        }
        xhr.onerror = function() {
          reject(new TypeError('Local request failed'))
        }
        xhr.open('GET', url)
        xhr.send(null)
      })
    }
    
    在此之后,舒尔建议您使用正确的型号加载器


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

    如果您试图在服务器端加载它,请使用
    @tensorflow/tfjs节点
    而不是
    @tensorflow/tfjs
    ,并更新到
    0.2.1
    或更高版本以解决此问题。

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

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

    const file=new Blob()
    file.src=modelJSON
    const files=new Blob()
    files.src=modelWeights
    console.log(文件)
    const model=wait tf.loadLayersModel(tf.io.browserFiles([file,files]);
    
    [![在此处输入图像描述][1][1]

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

    参考资料:

    const classifierModel=wait tf.loadLayersModel(
    "https://rp5u7.sse.codesandbox.io/api/pokeml/classify"
    ); 
    常量im=新图像()
    im.src=imagessample/'../../../../../../Models/shapeClassification/Samples/images(2.png');
    const abc=此预处理图像(im);
    const preds=await classifierModel.predict(abc)/.argMax(-1);
    log(“”,preds,'Principal',preds.shape[0],'DATA',preds.dataSync())
    const responde=[…preds.dataSync()]
    log('Maxmimo Valor',Math.max.apply(Math,response.map(函数(o){return o;})))
    设indiceMax=this.indexOfMax(响应)
    console.log(indiceMax)
    console.log(“”,this.labelReturn(indiceMax))
    
    如果您正在使用Django,您应该:

  • 在应用程序中创建一个目录static,并将模型放在那里

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

    var modelPath = "{% static 'sampleModel.json' %}">
    
    <script>model = await tf.loadGraphModel(modelPath)</script>
    
  • 不要忘记加载tensorflow.js库:

    
    
  • 现在,您可以加载您的模型:

    var modelPath = "{% static 'sampleModel.json' %}">
    
    <script>model = await tf.loadGraphModel(modelPath)</script>
    
    model=wait tf.loadGraphModel(modelPath)
    

  • 我猜您不是从开发服务器上提供服务?使用浏览器打开html文件会导致用于获取文件的xhr请求出现问题。也许可以尝试一下。我刚刚开始探索tensorflow js,并使用浏览器测试内容。非常感谢您的帮助。但是,在尝试在mo中加载文件时,我遇到了以下错误del Uncaught(承诺中)TypeError:未能在“FileReader”上执行“readAsText”:参数1不是“Blob”类型。可能,您必须在使用事件侦听器加载文件后读取该文件。您无法使用
    modelFromJSON
    <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs"></script>
    
    <script>model = await tf.loadGraphModel(modelPath)</script>