【问题标题】:model.predict is not a function while using TensorflowJS使用 TensorflowJS 时,model.predict 不是函数
【发布时间】:2018-05-29 03:59:07
【问题描述】:

我已经搜索了互联网的最远范围,如下所示:

它们都有相似的模型预测方式:

model.predict()

根据文档,它应该返回一个包含预测的对象。但是,我总是收到is not a function 错误。下面是我拥有的一段 sn-p 代码。

constructor() {
    console.time('Loading of model');
    this.mobileNet = new MobileNet();
    this.mobileNet.loadMobilenet();
    console.timeEnd('Loading of model');
}

const result = tfc.tidy(() => {

    // tfc.fromPixels() returns a Tensor from an image element.
    const raw = tfc.fromPixels(this.CANVAS).toFloat();
    const cropped = this.cropImage(raw);
    const resized = tfc.image.resizeBilinear(cropped, [this.IMAGE_SIZE, this.IMAGE_SIZE])

    // Normalize the image from [0, 255] to [-1, 1].
    const offset = tfc.scalar(127);
    const normalized = resized.sub(offset).div(offset);

    // Reshape to a single-element batch so we can pass it to predict.
    const batched = normalized.expandDims(0);

    console.log(batched)

    // Make a prediction through mobilenet.
    return this.mobileNet.model.predict(batched).dataSync();
});

编辑 包含模型的代码

import * as tfc from '@tensorflow/tfjs-core';
import { loadFrozenModel } from '@tensorflow/tfjs-converter';

const MODEL_URL = '/assets/project-gaea/models/web_model.pb';
const WEIGHTS_URL = '/assets/project-gaea/models/weights_manifest.json';

const INPUT_NODE_NAME = 'input';
const OUTPUT_NODE_NAME = 'MobilenetV1/Predictions/Reshape_1';
const PREPROCESS_DIVISOR = tfc.scalar(255 / 2);

export default class MobileNet {
    constructor() { }

    async loadMobilenet() {
        this.model = await loadFrozenModel(MODEL_URL, WEIGHTS_URL);
    }
}

【问题讨论】:

  • 能否添加创建模型或mobileNet变量的代码?
  • @SebastianSpeitel,包含模型的代码 sn-p
  • 在预测之前您是否尝试过 console.log 模型?您是否确保预测在loadMobilenet() 完成后发生(因为它是异步的)?
  • 是的。我已经安慰了每一件事,甚至到了 console.log(batched)。它们都返回一个值,直到它到达 predict() 函数
  • console.log(this.mobileNet.model) 带给你什么?

标签: javascript tensorflow tensorflow.js


【解决方案1】:

loadFrozenModel() 返回 FrozenModel,而不是 tf.model,因此您可以在此 example 中看到,FrozenModels 使用 execute() 而不是 predict()

【讨论】:

  • 是的,通过反复试验发现了这一点。不过谢谢,真的很有帮助。我还认为执行的示例图像需要与声明的 IMAGE_SIZE 大小相同。现在只需要弄清楚如何通过网络摄像头传递数据
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-22
  • 2019-09-12
  • 2021-06-07
  • 1970-01-01
  • 2018-07-15
相关资源
最近更新 更多