【问题标题】:Load Tensorflowjs from json object not json从 json 对象而不是 json 加载 Tensorflowjs
【发布时间】:2019-09-22 12:54:17
【问题描述】:

我正在尝试使用 model.json 加载 Tensorflowjs 模型,它是内存中的浏览器端对象。

https://js.tensorflow.org/api/latest/#loadLayersModel

一种方法可能是从虚拟 fetch 方法返回 json。

fetchFunc (Function) 用于覆盖window.fetch的函数 功能。

另外,也可以创建一个自定义 IOHandler,但是这方面的文档很少。

加载模型工件的 tf.io.IOHandler 对象及其负载 方法。

有谁知道如何使用 tensorflow 加载方法来实现这一点?

var modelJson = "{...ModelAndWeightsConfig}";

//Do something here to load it.

var newModel =  tf.loadLayersModel("/model_0/model.json", {
                    onProgress: onProgressCallback}).then(model =>{});

问候,

【问题讨论】:

    标签: javascript json tensorflow.js


    【解决方案1】:

    是的,您可以编写自己的IOHandler 来加载模型。查看IOHandler here 的定义。您必须实现返回Promise<ModelArtifacts>load 函数。

    也就是说,要加载file IOHandler保存的模型,您可以查看源代码并自己重新实现加载功能。

    代码示例

    以下是帮助您入门的示例。 load() 部分主要是从文件 IOHandler 中的 loadJSONModel 函数复制而来的。基本上,JSON 字符串作为参数传递,然后在 Tensorflow.js 调用 load 函数时使用。

    export class JSONHandler implements tfc.io.IOHandler {
      constructor(jsonString) {
         this.jsonString = jsonString;
      }
      async load() {
        const modelJSON = JSON.parse(jsonString);
        const modelArtifacts: tfc.io.ModelArtifacts = {
          modelTopology: modelJSON.modelTopology,
          format: modelJSON.format,
          generatedBy: modelJSON.generatedBy,
          convertedBy: modelJSON.convertedBy
        };
        if (modelJSON.weightsManifest != null) {
          // load weights (if they exist)
        }
        if (modelJSON.trainingConfig != null) {
          modelArtifacts.trainingConfig = modelJSON.trainingConfig;
        }
        if (modelJSON.userDefinedMetadata != null) {
          modelArtifacts.userDefinedMetadata = modelJSON.userDefinedMetadata;
        }
        return modelArtifacts;
      }
    }
    

    要使用模型,您可以创建它的实例并将其传递给加载函数:

    const modelJson = '{ ... }';
    const handler = new JSONHandler(modelJson);
    const model = await tf.loadLayersModel(handler);
    

    【讨论】:

    • 嗨,我似乎收到以下错误,Uncaught (in promise) TypeError: specs is not iterable at Module.decodeWeights (io_utils.js:105),有没有办法解决这个问题
    【解决方案2】:

    获取模型

        var fetchPromise = function(url,p1,p2,) {
            return new Promise(function(resolve, reject) {
                fetch(url)
                        .then(response => {
                            resolve(response);
                        }).catch(err =>{
                            reject();
                        });
            });
        };
    

    【讨论】:

      猜你喜欢
      • 2021-06-14
      • 2016-06-24
      • 2020-08-03
      • 2020-09-28
      • 1970-01-01
      • 2023-02-06
      • 1970-01-01
      • 2020-03-01
      • 2018-03-06
      相关资源
      最近更新 更多