对于NLP任务,Keras LSTM训练精度一直处于较低水平

对于NLP任务,Keras LSTM训练精度一直处于较低水平,keras,lstm,Keras,Lstm,我正在使用LSTM体系结构创建聊天机器人。我正在使用手套嵌入。 在我的训练过程中,我的训练准确度停留在非常低的值(0.1969)上,没有任何进展。我在下面附上我的代码。你能告诉我可以做些什么来改进培训吗 from keras.models import Sequential from keras.layers import Embedding, Flatten, Dense, LSTM from keras.optimizers import Adam model=Sequential()

我正在使用LSTM体系结构创建聊天机器人。我正在使用手套嵌入。 在我的训练过程中,我的训练准确度停留在非常低的值(0.1969)上,没有任何进展。我在下面附上我的代码。你能告诉我可以做些什么来改进培训吗

from keras.models import Sequential
from keras.layers import Embedding, Flatten, Dense, LSTM
from keras.optimizers import Adam


model=Sequential()
model.add(Embedding(max_words,embedding_dim,input_length=maxlen))
model.add(LSTM(units=100,return_sequences=True, kernel_initializer="glorot_normal", recurrent_initializer="glorot_normal", activation='sigmoid'))
model.add(LSTM(units=100,return_sequences=True, kernel_initializer="glorot_normal", recurrent_initializer="glorot_normal", activation='sigmoid'))
model.add(LSTM(units=100,return_sequences=True, kernel_initializer="glorot_normal", recurrent_initializer="glorot_normal", activation='sigmoid'))
model.add(LSTM(units=100,return_sequences=True, kernel_initializer="glorot_normal", recurrent_initializer="glorot_normal", activation='sigmoid'))
model.summary()

model.layers[0].set_weights([embedding_matrix])
model.layers[0].trainable = False

model.compile(loss='cosine_proximity', optimizer='adam', metrics=['accuracy'])

model.fit(x_train, y_train,
epochs = 500,
batch_size = 32,
validation_data=(x_val,y_val))

Epoch 498/500
60/60 [==============================] - 0s 3ms/step - loss: -0.1303 - acc: 0.1969 - val_loss: -0.1785 - val_acc: 0.2909
Epoch 499/500
60/60 [==============================] - 0s 3ms/step - loss: -0.1303 - acc: 0.1969 - val_loss: -0.1785 - val_acc: 0.2909
Epoch 500/500
60/60 [==============================] - 0s 3ms/step - loss: -0.1303 - acc: 0.1969 - val_loss: -0.1785 - val_acc: 0.2909

进一步的训练(在同一个对话数据集上)并不能提高准确性。

在嵌入后添加BatchNormalization层和LSTM。这有助于规范学习。我添加了它,它帮助了我。另外,看看数据。可能也有一些问题

#clear session
keras.backend.clear_session()
model = Sequential()
#embedding layer
model.add(Embedding(vocab_size, 50, input_length=pad_length))

#Batch Norm layer
model.add(BatchNormalization())

#First LSTM layer
model.add(LSTM(units=100, return_sequences=True))

#Batch Norm layer
model.add(BatchNormalization())
#add dropout too
model.add(Dropout(0.25))

#Second LSTM layer
model.add(LSTM(units=100))

#Batch Norm
model.add(BatchNormalization())

model.add(Dense(1, activation="sigmoid"))

为了理解您试图建模的问题和解决方案的公式:显然,
x\u train
是一个按单词索引编码的句子列表。但是什么是你的火车?
x\u-train
y\u-train
的形状是什么,即
x\u-train.shape
y\u-train.shape
?y\u-train(和y\u-val)是从手套嵌入矩阵中提取的单词嵌入向量列表。x_-train.shape(118,16)y_-train.shape(118,16100)