2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 【深度学习】-Imdb数据集情感分析之模型对比(4)- CNN-LSTM 集成模型

【深度学习】-Imdb数据集情感分析之模型对比(4)- CNN-LSTM 集成模型

时间:2023-02-19 14:39:59

相关推荐

【深度学习】-Imdb数据集情感分析之模型对比(4)- CNN-LSTM 集成模型

【深度学习】-Imdb数据集情感分析之模型对比(4)- CNN-LSTM 集成模型

前言

【深度学习】-Imdb数据集情感分析之模型对比(3)- CNN

【深度学习】-Imdb数据集情感分析之模型对比(2)- LSTM

【深度学习】-Imdb数据集情感分析之模型对比(1)- RNN

对之前内容感兴趣的朋友可以参考上面这几篇文章,接下来我要给大家介绍本篇博客的内容。为了观察CNN提取文本结构化的优势和LSTM提取上下文关系性的优势,我们将两种模型进行集成,引入了CNN-LSTM集成模型进行实验。先经过CNN层来提取局部特征,再使用LSTM层提取这些局部特征的长距离特征,再经变换输入全连接层,进行情感分析并打分量化,最后将两种模型的分数平均,从而得到最终分数。

一,CNN是什么?

CNN网络适合于提取数据的结构化信息,因此在特征工程中得到了广泛的应用,而LSTM网络更适合于提取数据的时间相关性和文本片段中的依赖项,有按时间顺序扩张的特性,广泛应用于时间序列中。同时,这给我们在情感分析任务上带来一个新思路,可以将两者结合,构建新的集成模型CNN-LSTM的对文本进行分类。模型结构如图所示:

二、训练CNN-LSTM模型

1.数据预处理

与前文类似,详细请移步【深度学习】-Imdb数据集情感分析之模型对比(1)- RNN

数据预处理部分

2.构建及训练CNN-LSTM模型

模型结构

设定模型参数

filter_length = 5 # 滤波器长度pool_length = 4# 池化长度max_features = 4000 # 词汇表大小maxlen = 400 # 序列最大长度embedding_size = 32 # 词向量维度nb_filter = 32# 1维卷积核个数filter_length = 3 # 卷积核长度hidden_dims = 256 # 隐藏层维度

构建网络模型

model = Sequential()model.add(Embedding(max_features, embedding_size, input_length=400)) # 词嵌入层model.add(Dropout(0.2)) # Dropout层lstm_output_size =32 # LSTM 层输出尺寸# 1D 卷积层,对词嵌入层输出做卷积操作model.add(Convolution1D(nb_filter=nb_filter,filter_length=filter_length,border_mode='valid',activation='relu',subsample_length=1))# 池化层model.add(MaxPooling1D(pool_length=pool_length))# LSTM 循环层model.add(LSTM(lstm_output_size))# 全连接层,只有一个神经元,输入是否为正面情感值model.add(Dense(1))model.add(Activation('sigmoid')) # sigmoid判断情感model.summary() # 模型概述

训练模型

定义损失函数,优化器以及评估矩阵,并开始训练模型。

## 训练模型pile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])train_history =model.fit(x_train, y_train,batch_size=32, epochs=10,verbose=1,validation_split=0.2)

三、可视化结果

import matplotlib.pyplot as pltdef show_train_history(train_history,train,validation):plt.plot(train_history.history[train])plt.plot(train_history.history[validation])plt.title('Train History')plt.ylabel(train)plt.xlabel('Epoch')plt.legend(['train', 'validation'], loc='upper left')plt.show()show_train_history(train_history,'accuracy','val_accuracy')show_train_history(train_history,'loss','val_loss')print('Test score:', score)print('Test accuracy:', acc)

因为博主的数据集删除了就不放可视化图片了,下次一定。

✿四、模型预测

请参照我这篇博客下的模型预测代码。

【深度学习】-Imdb数据集情感分析之模型对比(3)- CNN

五、评估模型并保存

模型评估

用测试集对模型的匹配精度进行评估

score, acc = model.evaluate(x_test, y_test,batch_size=128)

保存模型

model_json = model.to_json()with open("D:/final_all/1/1.json", "w") as json_file:json_file.write(model_json)model.save_weights("D:/final_all/1/2.h5")print("Saved model to disk")

六、总结

CNN-LSTM模型训练总用时670s,训练集上的准确率为98.96%,在测试集上的准确率为90.02%,损失率在7.5%,是这几个模型中最优良的模型。

实验总结可以参照我的下一篇博客,有我的整个实验的对比分析以及总结。

参考资料

/keeppractice/article/details/106145451

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。