Error: Tensorflow Op is not supported: AddN
Error: Tensorflow Op is not supported: AddN
我使用自己的数据集重新训练了一个 Mobilenet V1 模型。现在,我正试图让我的模型加载到这个示例项目中:
https://github.com/shivangidas/image-classifier
一直报以下错误
Error: Tensorflow Op is not supported: AddN
我不明白这是什么意思,也不明白为什么会显示此错误。我似乎也无法在网上找到任何相关信息。
这是我正在使用的代码:
const MODEL_URL =
"https://localhost/path/to/model";
const WEIGHTS_URL =
"https://localhost/path/to/weights_manifest";
let model;
let IMAGENET_CLASSES = [];
let offset = tf.scalar(128);
async function loadModelAndClasses() {
$.getJSON(
"https://localhost/path/to/labels.json",
function(data) {
$.each(data, function(key, val) {
IMAGENET_CLASSES.push(val);
});
}
);
model = await tf.loadFrozenModel(MODEL_URL, WEIGHTS_URL);
//console.log("After model is loaded: " + tf.memory().numTensors);
$(".loadingDiv").hide();
$("#inputImage").attr("disabled", false);
}
loadModelAndClasses();
function readURL(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function(e) {
$("#imageSrc")
.attr("src", e.target.result)
.width(224)
.height(224);
};
reader.readAsDataURL(input.files[0]);
//console.log("After image is loaded: " + tf.memory().numTensors);
reader.onloadend = async function() {
console.log("Before predictions: " + tf.memory().numTensors);
let imageData = document.getElementById("imageSrc");
//console.log("After offset: " + tf.memory().numTensors);
let pixels1 = tf.fromPixels(imageData);
let pixel2 = pixels1.resizeNearestNeighbor([224, 224]);
let pixel3 = pixel2.toFloat();
console.log("After pixels are formed: " + tf.memory().numTensors);
let pixels = pixel3.sub(offset);
let pixels4 = pixels.div(offset);
let pixels5 = pixels4.expandDims();
console.log("After pre-processing: " + tf.memory().numTensors);
const output = await model.predict(pixels5);
console.log("After output: " + tf.memory().numTensors);
const predictions = Array.from(output.dataSync())
.map(function(p, i) {
return {
probabilty: p,
classname: IMAGENET_CLASSES[i]
};
})
.sort((a, b) => b.probabilty - a.probabilty)
.slice(0, 10);
//console.log(predictions);
var html = "";
for (let i = 0; i < 10; i++) {
html += "<li>" + predictions[i].classname + "</li>";
}
$(".predictionList").html(html);
console.log("After predictions: " + tf.memory().numTensors);
pixels.dispose();
pixels1.dispose();
pixel2.dispose();
pixel3.dispose();
pixels4.dispose();
pixels5.dispose();
output.dispose();
console.log("After dispose: " + tf.memory().numTensors);
};
}
}
根据 this list,转换器支持 addN
操作。看起来您使用的 Tensorflow.js 版本相当旧。我注意到函数 loadFrozenModel
自 1.0 版(2019 年 3 月发布)起已重命名为 loadGraphModel
。
支持转换 addN
since version 0.5.6 (see this commit)。如果您的 Tensorflow.js 版本早于 0.5.6
,您可以简单地升级到更新的版本,它应该可以工作。
我使用自己的数据集重新训练了一个 Mobilenet V1 模型。现在,我正试图让我的模型加载到这个示例项目中: https://github.com/shivangidas/image-classifier
一直报以下错误
Error: Tensorflow Op is not supported: AddN
我不明白这是什么意思,也不明白为什么会显示此错误。我似乎也无法在网上找到任何相关信息。
这是我正在使用的代码:
const MODEL_URL =
"https://localhost/path/to/model";
const WEIGHTS_URL =
"https://localhost/path/to/weights_manifest";
let model;
let IMAGENET_CLASSES = [];
let offset = tf.scalar(128);
async function loadModelAndClasses() {
$.getJSON(
"https://localhost/path/to/labels.json",
function(data) {
$.each(data, function(key, val) {
IMAGENET_CLASSES.push(val);
});
}
);
model = await tf.loadFrozenModel(MODEL_URL, WEIGHTS_URL);
//console.log("After model is loaded: " + tf.memory().numTensors);
$(".loadingDiv").hide();
$("#inputImage").attr("disabled", false);
}
loadModelAndClasses();
function readURL(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function(e) {
$("#imageSrc")
.attr("src", e.target.result)
.width(224)
.height(224);
};
reader.readAsDataURL(input.files[0]);
//console.log("After image is loaded: " + tf.memory().numTensors);
reader.onloadend = async function() {
console.log("Before predictions: " + tf.memory().numTensors);
let imageData = document.getElementById("imageSrc");
//console.log("After offset: " + tf.memory().numTensors);
let pixels1 = tf.fromPixels(imageData);
let pixel2 = pixels1.resizeNearestNeighbor([224, 224]);
let pixel3 = pixel2.toFloat();
console.log("After pixels are formed: " + tf.memory().numTensors);
let pixels = pixel3.sub(offset);
let pixels4 = pixels.div(offset);
let pixels5 = pixels4.expandDims();
console.log("After pre-processing: " + tf.memory().numTensors);
const output = await model.predict(pixels5);
console.log("After output: " + tf.memory().numTensors);
const predictions = Array.from(output.dataSync())
.map(function(p, i) {
return {
probabilty: p,
classname: IMAGENET_CLASSES[i]
};
})
.sort((a, b) => b.probabilty - a.probabilty)
.slice(0, 10);
//console.log(predictions);
var html = "";
for (let i = 0; i < 10; i++) {
html += "<li>" + predictions[i].classname + "</li>";
}
$(".predictionList").html(html);
console.log("After predictions: " + tf.memory().numTensors);
pixels.dispose();
pixels1.dispose();
pixel2.dispose();
pixel3.dispose();
pixels4.dispose();
pixels5.dispose();
output.dispose();
console.log("After dispose: " + tf.memory().numTensors);
};
}
}
根据 this list,转换器支持 addN
操作。看起来您使用的 Tensorflow.js 版本相当旧。我注意到函数 loadFrozenModel
自 1.0 版(2019 年 3 月发布)起已重命名为 loadGraphModel
。
支持转换 addN
since version 0.5.6 (see this commit)。如果您的 Tensorflow.js 版本早于 0.5.6
,您可以简单地升级到更新的版本,它应该可以工作。