#python #tensorflow #machine-learning #keras #deep-learning
Вопрос:
Я пытаюсь использовать искусственную нейронную сеть для многоклассовой классификации с использованием Tensorflow с Keras. Я строю модель со следующей формой:
print(X_train.shape, X_test.shape, y_train.shape, y_test.shape`
(2000, 5, 5) (800, 5, 5) (2000, 4) (800, 4)
Этикетки закодированы в одну горячую.
Вот моя модель:
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import Dropout
model = Sequential()
model.add(Dense(64, input_shape=(X_train.shape[1], X_train.shape[2],), activation='relu'))
model.add(Dense(32, activation='relu'))
model.add(Dense(y_train.shape[1], activation='softmax'))
model.compile(optimizer = 'adam', loss='categorical_crossentropy', metrics=['accuracy'])
# model.summary()
model.fit(X_train, y_train, epochs=5, batch_size=32, verbose=1, validation_data=(X_test, y_test)`
Я получаю эту ошибку:
ValueError: A target array with shape (2000, 4) was passed for an output of shape (None, 5, 4) while using as loss `categorical_crossentropy`. This loss expects targets to have the same shape as the output.
Откуда берется проблема ?
Ответ №1:
Вероятно, вам следует уменьшить размер в вашей сети. Вы должны перейти от 3d к 2d, чтобы соответствовать своей цели. Вы можете сделать это с помощью глобального слоя слияния или сглаживания. Попробуйте использовать Flatten ()
до выходного уровня или ( GlobalAveragePooling1D()
или GlobalMaxPooling1D()
)