#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. Я был немного занят, когда писал ответ. Я изменил это. Теперь это должно сработать, как описано выше.