Ошибка с формой целей при построении многоклассовой классификации с помощью tensorflow

#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() )