如何理解和调试keras.model.fit中的错误?

如何理解和调试keras.model.fit中的错误?,keras,lstm,keras-layer,tf.keras,Keras,Lstm,Keras Layer,Tf.keras,我正在尝试实现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, wei

我正在尝试实现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_列和y_列具有以下形状-(10240198)和(10240,)

我得到以下错误:


您的输出层有6个输出(可能给出了6个类),但y_序列中的目标标签显然是以整数形式给出的(数组是平面的)。 首先需要将y_序列转换为一个热编码数组,否则无法计算交叉熵损失。输入和输出张量必须始终与模型的输入和输出兼容

假设y_列中有6个类,编码为: 0,1,2,3,4,5

您需要转换:

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

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

等等

试着这样做:

import tf.keras.backend as K


只需将这一行从
model.compile(optimizer=adam,loss='classifical\u crossentropy',metrics=['classifical\u accurity'])改为
model.compile(optimizer=adam,loss='sparse\u classifical\u crossentropy',metrics=['accurity'])就可以了。让我知道它是否对你有用。
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)