【问题标题】:How to import trained model without initializing weights如何在不初始化权重的情况下导入训练模型
【发布时间】:2019-11-02 05:27:53
【问题描述】:

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

【问题讨论】:

    标签: javascript tensorflow tensorflowjs-converter tensorflowjs


    【解决方案1】:

    根据文档:

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

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

    【讨论】:

    • 它不是一个自定义层,只是一个自定义初始化器,如果权重已经存在,则不需要它。因此,不再需要初始化权重。
    • 找到了初始化器的解决方案,但后来遇到了自定义层的问题,所以我会接受答案
    猜你喜欢
    • 2021-04-17
    • 2021-06-08
    • 2020-09-20
    • 2016-06-29
    • 2020-10-27
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多