2

我使用 tensorflowjs-converter 将在 ImageNet 上预训练的 EfficientNet 模型转换为 tensorflow-js。当我尝试将模型加载到我的脚本中时,它会尝试使用未在 tfjs 中实现的初始化程序来初始化权重。然而,没有必要初始化权重,因为模型已经过预训练并且权重也被转换了。转换后的模型在这里: https ://github.com/paulsp94/tfjs_efficientnet3_imagenet

这是问题的 CodePen 示例: https ://codepen.io/paulsp94/pen/XLNdJq

const start = async () => {
  efficientNetURL = 'https://raw.githubusercontent.com/paulsp94/tfjs_efficientnet3_imagenet/master/model.json';

  console.log("Load Model");
  let model;
  try {
    model = await tf.loadLayersModel(efficientNetURL, {strict: true});
    console.log(model.summary());
   } catch (error) {
     console.error(error);
   }
};

start()

您必须打开浏览器的控制台,才能看到正确的错误。

错误是:

错误:“未知初始化程序:EfficientConv2DKernelInitializer。这可能是由于以下原因之一:1.初始化程序是在 Python 中定义的,在这种情况下,它需要移植到 TensorFlow.js 或您的 JavaScript 代码。2.自定义初始化程序在 JavaScript 中定义,但未使用 tf.serialization.registerClass() 正确注册。”

更新: 虽然我可以绕过初始化程序,但将所有未知的初始化程序替换为例如 Zeros 初始化程序。我遇到了当前无法解决的自定义图层(Swish 图层)的另一个问题。

4

1 回答 1

0

根据文档:

TensorFlow.js 层目前仅支持使用标准 Keras 构造的 Keras 模型。使用不受支持的操作或层的模型(例如自定义层、Lambda 层、自定义损失或自定义指标)无法自动导入,因为它们依赖于无法可靠地转换为 JavaScript 的 Python 代码。

目前无法导入带有自定义图层的模型

于 2019-06-19T15:40:40.173 回答