Как импортировать обученную модель без инициализации весов
Я преобразовал модель EfficientNet, которая была предварительно обучена в ImageNet, в tenorflow-js, используя tenorflowjs-конвертер. Когда я пытаюсь загрузить модель в мой скрипт, он пытается инициализировать веса с помощью инициализаторов, которые не реализованы в 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 ответ
Согласно документации:
Слои TensorFlow.js в настоящее время поддерживают только модели Keras, использующие стандартные конструкции Keras. Модели, использующие неподдерживаемые операции или слои - например, пользовательские слои, слои Lambda, пользовательские потери или пользовательские метрики - не могут быть импортированы автоматически, поскольку они зависят от кода Python, который не может быть надежно переведен в JavaScript.
В настоящее время невозможно импортировать модель с пользовательскими слоями.