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,您可以简单地升级到更新的版本,它应该可以工作。