проблема классификации keras, ошибка в команде model.fit

#tensorflow #keras #classification

#tensorflow #keras #классификация

Вопрос:

«Я хочу решить проблему классификации с помощью keras.model, но после запуска модели.fit Я сталкиваюсь с ошибкой измерения. Я запустил следующий код:’

 print(X_train.shape)
print(y_train.shape)
  

‘вывод:’

 (2588, 39436)
(2588, 6)

model = keras.Sequential(
    [
        keras.Input(shape=(39436,1)),
        layers.Conv1D(32, kernel_size=3, strides=5, activation="relu"),
        layers.MaxPooling1D(pool_size=10),
        layers.Conv1D(64, kernel_size=3, strides=5, activation="relu"),
        layers.MaxPooling1D(pool_size=10),
        layers.Flatten(),
        layers.Dropout(0.5),
        layers.Dense(num_classes, activation="softmax"),
    ]
)

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

‘После выполнения следующего кода, ‘

 model.fit(X_train, y_train, batch_size=128, epochs=15, validation_split=0.3)
  

‘Я выдаю эту ошибку:’

Ошибка значения: в пользовательском коде:

Ошибка значения: ввод 0 для layer sequential_1 несовместим со слоем: : ожидаемый min_ndim=3, найденный ndim=2. Получена полная форма: [Нет, 39436]

«Было бы полезно, если бы вы указали мне, в чем проблема?»

Ответ №1:

Ваш входной массив, согласно сообщению об ошибке, имеет форму [None, 39436] . Однако в вашем Input слое вы передаете форму [39436, 1] , которая соответствует, [None, 39436, 1] где None представлено измерение выборки. Это ошибка, которая выдается.

Вам нужно сопоставить формы, либо:

1. Измените форму ваших входных данных, чтобы они имели форму [samples, 39436, 1] , оставив архитектуру модели неизменной.

Это можно сделать следующим образом (предположим, что train_X — это ваши входные функции):

 train_X = np.expand_dims(train_X, axis=2)
  

np.expand_dims добавляет новое измерение к массиву с индексом 2 формы массива. Итак, здесь он преобразуется [samples, 39436] в [samples, 39436, 1] .

См.: Документы NumPy для expand_dims

или

параметр input_shape 2. Измените в Input слое, чтобы принять форму [39436,] , чтобы соответствовать вашим данным.

Комментарии:

1. Большое спасибо за вашу поддержку. Но решение не сработало. На самом деле форма ввода сначала выглядит следующим образом: print(X_train.shape) ‘output:’ (2588, 39436)

2. Я был немного занят, когда писал ответ. Я изменил это. Теперь это должно сработать, как описано выше.