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

我使用 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 图层)的另一个问题。


开心每一天1111
浏览 274回答 1
1回答

ITMISS

根据文档:TensorFlow.js Layers 目前仅支持使用标准 Keras 构造的 Keras 模型。使用不受支持的操作或层(例如自定义层、Lambda 层、自定义损失或自定义指标)的模型无法自动导入,因为它们依赖于无法可靠地转换为 JavaScript 的 Python 代码。目前无法使用自定义层导入模型
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript