使用双向LSTM实现文本分类代码
时间: 2024-05-14 14:16:35 浏览: 135
以下是使用双向LSTM实现文本分类的代码,以Keras框架为例:
```python
from keras.layers import Dense, Input, LSTM, Embedding, Dropout, Bidirectional
from keras.models import Model
from keras.callbacks import EarlyStopping
# 定义输入层
inputs = Input(shape=(maxlen,))
# 定义Embedding层
embedding_layer = Embedding(input_dim=num_words,
output_dim=embedding_dim,
input_length=maxlen,
weights=[embedding_matrix],
trainable=False)
x = embedding_layer(inputs)
# 定义双向LSTM层
x = Bidirectional(LSTM(units=128, return_sequences=True))(x)
x = Dropout(0.5)(x)
x = Bidirectional(LSTM(units=64))(x)
x = Dropout(0.5)(x)
# 定义输出层
outputs = Dense(units=num_classes, activation='softmax')(x)
# 定义模型
model = Model(inputs=inputs, outputs=outputs)
# 编译模型
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
# 定义EarlyStopping回调函数
early_stopping = EarlyStopping(monitor='val_loss', patience=3)
# 训练模型
model.fit(x_train, y_train,
validation_data=(x_val, y_val),
batch_size=128,
epochs=20,
callbacks=[early_stopping])
```
其中,`maxlen`为文本最大长度,`num_words`为词汇表大小,`embedding_dim`为词向量维度,`embedding_matrix`为预训练词向量矩阵,`num_classes`为分类数,`x_train`和`y_train`为训练数据,`x_val`和`y_val`为验证数据。`EarlyStopping`回调函数用于在验证集上监控模型性能,当验证集上的损失停止下降时,停止训练以避免过拟合。
阅读全文