我使用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图层)的另一个问题。
答案 0 :(得分:0)
根据文档:
TensorFlow.js图层当前仅支持使用标准Keras构造的Keras模型。使用不受支持的操作或图层的模型,例如自定义图层,Lambda图层,自定义损失或自定义指标无法自动导入,因为它们依赖于无法可靠地转换为JavaScript的Python代码。
当前无法导入带有自定义图层的模型