Как понять и устранить ошибку внутри keras.model.fit? - PullRequest
0 голосов
/ 19 апреля 2020

Я пытаюсь реализовать keras LSTM . Я получаю ошибку внутри keras.model.fit . Я не понимаю, что означает эта ошибка. Надеюсь, вы, ребята, можете мне помочь? Мой код приведен ниже -

print(x_train.shape)
print(y_train.shape)

word_input = Input(shape=(mxlen,), dtype="int32", name="word_input")
x1 = Embedding(len(vocab), 100, input_length=mxlen, weights=[embeddings], trainable=False)(word_input)
x1 = LSTM(100)(x1)

y = Dense(6, activation="softmax", name="main_output")(x1)

model = Model(inputs=[word_input], outputs=[y])
adam = optimizers.Adam(learning_rate=0.001, beta_1=0.9, beta_2=0.999, amsgrad=False)
model.compile(optimizer=adam,loss='categorical_crossentropy',metrics=['categorical_accuracy']) # have to look into it
model.fit(x_train, y_train, epochs=30, batch_size=40, verbose=1)

x_train и y_train имеет следующую форму - (10240, 198) и (10240,) .

Я получаю следующую ошибку. enter image description here

1 Ответ

1 голос
/ 19 апреля 2020

Ваш выходной слой имеет 6 выходов (возможно, дано 6 классов), но метки назначения в y_train даны как целые числа, по-видимому (массив плоский). Вам нужно сначала преобразовать y_train в массив с горячим кодированием, иначе потеря кросс-энтропии не может быть вычислена. Тензоры входа и выхода всегда должны быть совместимы с входами и выходами модели.

Учитывая, что в y_train есть 6 классов, закодированных как: 0,1,2,3,4,5

требуется преобразование:

0 -> 1., 0., 0., 0., 0., 0.

1 -> 0., 1., 0. , 0., 0., 0.

et c.

Попробуйте это так:

import tf.keras.backend as K

...

num_classes = 6
y_one_hot = K.one_hot( y_train, num_classes )

....

model.fit(x_train, y_one_hot, epochs=30, batch_size=40, verbose=1)
...