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

时间:2019-06-19 12:59:19

标签: javascript tensorflow tensorflowjs-converter tensorflowjs

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

1 个答案:

答案 0 :(得分:0)

根据文档:

  

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

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

相关问题