Проблема с загрузкой 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 шт):

Автор решения: Sindik

Причина ошибки

Первое, что приходит на ум, когда мы видим ошибку на подобии вашей - это проверка, есть ли у нас данные и правильно ли указан путь В вашем случае проблема действительно в пути.

  • Загрузчик 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 может ожидать другую структуру. Следуйте инструкции из официальной документации.

→ Ссылка