ValueError: Ошибка при проверке входных данных: ожидался вход dense_36_input с формой (None, 12), но получен массив с формой (140, 2)

Вопрос или проблема

Создание модели:

model=Sequential()
model.add(Dense(input_dim = 12, units = 10, activation='relu', kernel_initializer="uniform"))
model.add(Dense(units = 8, activation='relu', kernel_initializer="uniform"))
model.add(Dense(units = 1, activation='sigmoid', kernel_initializer="uniform"))

print('Обучение модели...')

Компиляция модели:

model.compile(optimizer="adam", loss="binary_crossentropy", metrics=['accuracy'])

выполняя model.fit()

Настройка модели:

model.fit(X_train, y_train, batch_size=32, epochs=10, verbose=1)

Я получаю ошибку:

ValueError: Ошибка при проверке входных данных: ожидаемый dense_36_input имеет форму 
(None, 12), но получен массив с формой (140, 2)

Размерность входа означает количество признаков или столбцов, которые ваши входные данные должны иметь.

Нейронная сеть попытается адаптироваться к этой форме входа. В вашем случае вы указали input_dim = 12, но в ваших данных (140,2) всего 2 признака или столбца.

Таким образом, есть два варианта:

  1. Установите input_dim = 2

  2. Измените форму входного массива на кратные указанной размерности входа, т.е. 12.

В вашем случае РАБОТАЕТ ТОЛЬКО вариант 1, потому что (140,2) не может быть изменен на кратные 12.

Примечание: другие допустимые input_dim для вас могут быть 14 (измените входные данные на (20,14)), 10 (измените входные данные на (28,10))

Ответ или решение

Ошибка, с которой вы столкнулись, связана с несоответствием формы входных данных, ожидаемых вашей нейронной сетью, и фактической формой данных, которые вы предоставляете. Давайте разберем это более подробно.

Вы создали модель, в которой указали input_dim = 12, что означает, что модель ожидает на вход данные с 12 признаками (колонками). Однако ваши входные данные имеют размерность (140, 2), что означает, что у вас только 2 признака, а не 12.

Возможные решения проблемы

Для решения данной проблемы у вас есть два основных варианта:

  1. Изменить input_dim на 2:
    Если ваши данные содержат только 2 признака (колонки), вы можете изменить параметр input_dim в первом слое вашей модели:

    model.add(Dense(input_dim=2, units=10, activation='relu', kernel_initializer="uniform"))

    Это самый простой и логичный вариант, так как он напрямую соответствует вашей текущей структуре данных.

  2. Изменить форму входных данных:
    Другим вариантом является изменение ваших входных данных так, чтобы они соответствовали нужному количеству признаков. Однако в вашем случае, с формой данных (140, 2), это может не быть практичным, так как размерность данных не позволяет просто так изменить ее на 12.

    Если бы вы имели, например, 280 образцов и желали бы преобразовать ваши данные в (20, 14), вы могли бы так сделать. В вашем случае, когда у вас всего 140 образцов и 2 признака, это невозможно.

Рекомендации

  • Вероятно, наиболее подходящим решением для вашей задачи является изменение input_dim на 2, если вы не планируете добавлять больше признаков в ваши данные.
  • Также стоит отметить, что если вы хотите использовать другие размеры входных данных, вам нужно будет дополнительно изменить данные так, чтобы они образовывали требуемые формы. Это может потребовать дополнительных манипуляций с данными, таких как дублирование признаков или создание новых, если это возможно и уместно.

Таким образом, рекомендуется изменить код следующим образом:

model.add(Dense(input_dim=2, units=10, activation='relu', kernel_initializer="uniform"))

После этого попробуйте снова запустить model.fit(), и ошибка должна исчезнуть.

Оцените материал
Добавить комментарий

Капча загружается...