model.predict 在使用 TensorflowJS 时不是函数
model.predict is not a function while using TensorflowJS
我已经像下面这样搜索了互联网的最远地方:
- https://beta.observablehq.com/@cedrickchee/load-and-serve-a-pre-trained-model-in-javascript-with-tensor
- https://github.com/google/emoji-scavenger-hunt
- https://medium.com/tensorflow/a-gentle-introduction-to-tensorflow-js-dba2e5257702
他们都有相似的模型预测方式:
model.predict()
根据文档,它应该 return 一个包含预测的对象。但是,我总是收到 is not a function
错误。下面是我的一段代码。
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);
}
}
loadFrozenModel()
returns 一个 FrozenModel,而不是 tf.model,所以你可以在这个 example 中看到,FrozenModel
s 使用 execute()预测()
我已经像下面这样搜索了互联网的最远地方:
- https://beta.observablehq.com/@cedrickchee/load-and-serve-a-pre-trained-model-in-javascript-with-tensor
- https://github.com/google/emoji-scavenger-hunt
- https://medium.com/tensorflow/a-gentle-introduction-to-tensorflow-js-dba2e5257702
他们都有相似的模型预测方式:
model.predict()
根据文档,它应该 return 一个包含预测的对象。但是,我总是收到 is not a function
错误。下面是我的一段代码。
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);
}
}
loadFrozenModel()
returns 一个 FrozenModel,而不是 tf.model,所以你可以在这个 example 中看到,FrozenModel
s 使用 execute()预测()