从 json 对象而非 json 加载 Tensorflowjs

Load Tensorflowjs from json object not json

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

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

一种方法可能是 return 来自虚拟获取方法的 json。

fetchFunc (Function) A function used to override the window.fetch function.

或者,可以创建自定义 IOHandler,但相关文档很少。

An tf.io.IOHandler object that loads model artifacts with its load method.

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

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

//Do something here to load it.

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

此致,

获取模型

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

是的,您可以编写自己的 IOHandler 来加载模型。查看 IOHandler here. You have to implement the load function that returns a Promise<ModelArtifacts>.

的定义

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

代码示例

这是帮助您入门的示例。 load() 部分大部分是从文件 IOHandler.c 中的 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);