Проблема с загрузкой Tensorflow.js модели
У меня есть ИИ модель формата keras, которую я создал на python с использованием библиотеки tensorflow, после чего сохранил в формате .h5 и конвертировал в Tensorflow.js При попытке её загрузить в js в терминале появилась эта ошибка:
Uncaught (in promise) t: Provided weight data has no target variable: sequential/layers/dense/kernel
Как я понимаю, проблема связанна с тем, что при загрузке не удаётся найти веса для слоя dense. Я просмотрел файл model.json и нашёл тот фрагмент, в котором предположительно сама ошибка.
"weightsManifest": [
{
"paths": [ "group1-shard1of2.bin", "group1-shard2of2.bin" ],
"weights": [
{
"name": "sequential/dense/kernel",
"shape": [ 100, 7511 ],
"dtype": "float32"
},
Вот слой dense, о котором идёт речь
{
"class_name": "Dense",
"config": {
"name": "dense",
"trainable": true,
"dtype": {
"module": "keras",
"class_name": "DTypePolicy",
"config": { "name": "float32" },
"registered_name": null
},
"units": 7511,
"activation": "softmax",
"use_bias": true,
"kernel_initializer": {
"module": "keras.initializers",
"class_name": "GlorotUniform",
"config": { "seed": null },
"registered_name": null
},
"bias_initializer": {
"module": "keras.initializers",
"class_name": "Zeros",
"config": {},
"registered_name": null
},
"kernel_regularizer": null,
"bias_regularizer": null,
"kernel_constraint": null,
"bias_constraint": null
}
}
Я пробовал заново конвертировать модель (и использовал другие версии конвертора), вручную изменять model.json и искал в интернете похожие ситуации, но ничего из этого не помогло. Может быть кто-то знает, как это можно исправить?
Ответы (1 шт):
Причина ошибки
Первое, что приходит на ум, когда мы видим ошибку на подобии вашей - это проверка, есть ли у нас данные и правильно ли указан путь В вашем случае проблема действительно в пути.
Загрузчик TensorFlow.js ожидает веса по адресу "sequential/layers/dense/kernel"
В вашем файле model.json "sequential/dense/kernel", отсутствует "/layers/"
!!! Так же возможно у вас будет ошибка с "dense/bias" проверьте чтоб, в "name" так же был "/layers/"
Решается эта проблема двумя способами:
1 решение
В ручную замените "name"
"weightsManifest": [
{
...
"weights": [
{
"name": "sequential/layers/dense/kernel",
...
},
2 решение
Проверьте совместимость библиотек keras и TensorFlow. Так как модели "Sequential" в Keras могут экспортировать веса с одним путём, а парсер слоёв в TensorFlow может ожидать другую структуру. Следуйте инструкции из официальной документации.