首页 > 解决方案 > 使用 Bi-LSTM 和 glove 的多类分类

问题描述

我正在使用 BI LSTM 和手套嵌入进行多类分类,当我训练我的模型时,在预测 (model.predict) 上我得到不正确的结果,如下所示,结果不在 0 和 1 之间,有人可以帮我吗?

我还使用了一种热编码。在此处输入图像描述


3916/3916 [==============================] - 17s 4ms/step
[[9.9723792e-01 1.6954101e-03 1.0665554e-03]
 [1.6794224e-01 8.6485274e-02 7.4557245e-01]
 [9.4370516e-03 1.0848863e-03 9.8947805e-01]
 ...
 [1.3264662e-02 9.7078091e-01 1.5954463e-02]
 [1.2019513e-02 9.8711687e-01 8.6356810e-04]
 [8.1863362e-01 1.5828104e-01 2.3085352e-02]]

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM,Dense, Dropout,Bidirectional
from tensorflow.keras.layers import SpatialDropout1D
from tensorflow.keras.layers import Embedding
from tensorflow.keras.preprocessing.text import Tokenizer


embedding_vector_length = 100

model_2 = Sequential()

model_2.add(Embedding(len(tokenizer.word_index) + 1, embedding_vector_length,     
                                         input_length=409,name="Bi-LSTM") )

model_2.add(SpatialDropout1D(0.3))
model_2.add(Bidirectional(LSTM(64, return_sequences=False, recurrent_dropout=0.4)))
model_2.add(Dropout(0.5))
model_2.add(Dense(3,activation='softmax'))
model_2.compile(loss='categorical_crossentropy',optimizer='adam', 
                           metrics=['accuracy'])
print(model_2.summary())


model_2.layers[0].set_weights([embedding_matrix])
model_2.layers[0].trainable = False
print(model_2.summary())




from keras.callbacks import EarlyStopping
es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=3)
history_2=model_2.fit(x_train, y_train,
 batch_size=400,
 epochs=30,
 validation_data=(x_val, y_val),
 callbacks=[es])
#We save this model so that we can use in own web app



标签: pythontensorflowkerasdeep-learningnlp

解决方案


如果打印的矩阵是您的model.predict()结果 - 它们介于 0 和 1 之间(您需要考虑指数部分)


推荐阅读