Вопрос или проблема
Надеюсь, у вас всё хорошо и вы в порядке.
Я пытаюсь реализовать модель CNN для прогнозирования камней в почках. Эта модель работает как ожидается на моем локальном компьютере, но когда я пытаюсь развернуть приложение в Streamlit Cloud, появляется сообщение об ошибке: ValueError: Layer ‘conv1d_12’ expected 2 variables, but received 0 variables during loading. Expected: [‘conv1d_12/kernel:0’, ‘conv1d_12/bias:0’]. Прошу вашей помощи в выяснении возможной причины, которая может приводить к этой проблеме.
Код приведен ниже:
from sklearn.model_selection import train_test_split
X = df1[['gravity', 'ph', 'osmo', 'cond', 'urea', 'calc', 'osmo_cond_ratio', 'urea_calc_diff', 'osmo_urea_interaction', 'gravity_bin', 'ph_bin', 'osmo_bin', 'cond_bin', 'urea_bin', 'calc_bin']]
y = df1['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=None)
X_train = np.reshape(X_train.to_numpy(), (X_train.shape[0], X_train.shape[1], 1))
X_test = np.reshape(X_test.to_numpy(), (X_test.shape[0], X_test.shape[1], 1))
model = Sequential()
model.add(Conv1D(filters=32, kernel_size=3, padding='same', activation='relu', input_shape=(X_train.shape[1], X_train.shape[2])))
model.add(Conv1D(filters=64, kernel_size=3, padding='same', activation='relu'))
model.add(Conv1D(filters=128, kernel_size=3, padding='same', activation='relu'))
model.add(MaxPooling1D(pool_size=2))
model.add(Dropout(0.2))
model.add(Bidirectional(LSTM(128, return_sequences=True)))
model.add(Bidirectional(LSTM(64)))
model.add(Dropout(0.2))
Заранее благодарю и желаю отличных выходных.
Я столкнулся с аналогичной проблемой и выяснил, что она была вызвана несоответствием версий tensorflow
, используемых для обучения модели и для её обслуживания.
Я бы настоятельно рекомендовал проверить вашу версию tensorflow
и убедиться, что она последовательна.
Ответ или решение
Проблема, с которой вы столкнулись, связана с ошибкой при загрузке модели в Keras, а именно с сообщением об ошибке: ‘ValueError: Layer ‘conv1d_12′ expected 2 variables, but received 0 variables during loading’. Это происходит, когда Keras не может найти параметры, необходимые для инициализации слоя свертки, такие как kernel
и bias
.
Вот несколько причин и решений этой проблемы:
-
Несоответствие версий TensorFlow/Keras:
Часто такие ошибки возникают из-за расхождений в версиях TensorFlow/Keras, используемых при обучении модели и при её развертывании. Убедитесь, что в вашей среде Streamlit Cloud установлены те же версии TensorFlow/Keras, что и на вашем локальном компьютере. Вы можете указать необходимые версии в вашем файлеrequirements.txt
.Пример:
tensorflow==<ваша_версия> keras==<ваша_версия>
-
Сохранение и загрузка модели:
Убедитесь, что вы правильно сохраняете и загружаете модель. При сохранении модели используйте методmodel.save('имя_файла.h5')
, а при загрузке —loaded_model = load_model('имя_файла.h5')
. Также стоит убедиться, что вы не вносили изменений в архитектуру модели между этапами обучения и развертывания. -
Проблемы с конфигурацией слоев:
Проверьте, правильно ли вы конфигурируете собственные слои или используете нестандартные функции активации. Если вы используете кастомные слои, убедитесь, что они корректно определены и правильно импортированы при загрузке модели. -
Различия в данных:
Убедитесь, что данные, которые вы передаете в модель на этапе предсказания, имеют ту же форму, что и на этапе обучения. Это включает в себя как количество признаков, так и их структуру. Особенно обратите внимание наinput_shape
. -
Обновление кода:
Если вы используете специфичные аргументы или возможности Keras, которые могут быть недоступны в старых версиях, это также может вызвать подобные ошибки. Рассмотрите возможность обновления кода для соответствия актуальным стандартам.
Обязательно проверьте эти аспекты, чтобы убедиться, что проблема исчезла. Если ошибка не устраняется, прикрепите больше информации о том, как вы сохранили модель, а также детали о версиях используемого ПО, чтобы получить более детальное решение.
В заключение, уделите внимание согласованности версии TensorFlow/Keras как ключевому моменту в успешной загрузке вашей модели. Удачи в вашем проекте по предсказанию камней в почках!