我使用tensorflowjs-converter将在ImageNet上预训练的EfficientNet模型转换为tensorflow-js。当我尝试将模型加载到脚本中时,它将尝试使用tfjs中未实现的初始化程序初始化权重。但是,由于模型是经过预训练且权重也已转换的,因此不必初始化权重。转换后的模型在这里:https : //github.com/paulsp94/tfjs_ficientnet3_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层)的另一个问题。
根据文档:
TensorFlow.js图层目前仅支持使用标准Keras构造的Keras模型。使用不受支持的操作或图层(例如自定义图层,Lambda图层,自定义损失或自定义指标)的模型无法自动导入,因为它们依赖于无法可靠地转换为JavaScript的Python代码。
当前无法导入带有自定义图层的模型
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句