Keras - "ValueError: Ошибка при проверке цели: ожидается, что Activation_1 будет иметь форму (Нет, 9), но получил массив с формой (9,1) - PullRequest
0 голосов
/ 08 октября 2019

Я строю модель для классификации текста на один из 9 слоев, и у меня возникла эта ошибка при запуске. Активация 1, по-видимому, ссылается на вход слоя Convolutional, но я не уверен, что не так со входом.

num_classes=9
Y_train = keras.utils.to_categorical(Y_train, num_classes)
#Reshape data to add new dimension
X_train = X_train.reshape((100, 150, 1)) 
Y_train = Y_train.reshape((100, 9, 1)) 
model = Sequential() 
model.add(Conv1d(1, kernel_size=3, activation='relu', input_shape=(None, 1))) 
model.add(Dense(num_classes)) 
model.add(Activation('softmax')) 

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) 
model.fit(x=X_train,y=Y_train, epochs=200, batch_size=20)

Запуск этого приводит к следующей ошибке:

"ValueError: Ошибка при проверке цели: ожидается, что Activation_1 будет иметь форму (Нет, 9), но получил массив с формой (9,1)

1 Ответ

0 голосов
/ 08 октября 2019

В вашем коде есть несколько опечаток и ошибок.

  1. Y_train = Y_train.reshape((100,9))

  2. Поскольку вы изменили X_train на (100,150,1), я полагаю, ваш шаг ввода равен 150, и каналравно 1. Таким образом, для Conv1D, (в вашем коде есть опечатка), input_shape=(150,1).

  3. Вам необходимо сгладить вывод conv1d перед подачей в плотный слой.

import keras
from keras import Sequential
from keras.layers import Conv1D, Dense, Flatten

X_train = np.random.normal(size=(100,150))
Y_train = np.random.randint(0,9,size=100)

num_classes=9
Y_train = keras.utils.to_categorical(Y_train, num_classes)
#Reshape data to add new dimension
X_train = X_train.reshape((100, 150, 1)) 
Y_train = Y_train.reshape((100, 9)) 
model = Sequential() 
model.add(Conv1D(2, kernel_size=3, activation='relu', input_shape=(150,1)))
model.add(Flatten())
model.add(Dense(num_classes, activation='softmax')) 

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) 
model.fit(x=X_train,y=Y_train, epochs=200, batch_size=20)
...