如何在不初始化权重的情况下导入经过训练的模型

How to import trained model without initializing weights

我使用 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() 正确注册。"

更新: 虽然我可以通过将所有未知的初始化器替换为例如零初始值设定项。我 运行 遇到了另一个自定义层(Swish 层)的问题,目前无法解决。

根据文档:

TensorFlow.js Layers currently only supports Keras models using standard Keras constructs. Models using unsupported ops or layers—e.g. custom layers, Lambda layers, custom losses, or custom metrics—cannot be automatically imported, because they depend on Python code that cannot be reliably translated into JavaScript.

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