目录

  • 前言
  • 一、电影评论分类实战
    • 1-1、数据集介绍&数据集导入&分割数据集
    • 1-2、字典的键值对颠倒&数字评论解码
    • 1-3、将整数序列转化为张量(训练数据和标签)
    • 1-4、搭建神经网络&选择损失函数和优化器&划分出验证集
    • 1-5、开始训练&绘制训练损失和验证损失&绘制训练准确率和验证准确率
    • 1-6、在测试集上验证准确率
  • 二、调参总结
  • 总结

前言

对于imdb数据集的评论分类实战

一、电影评论分类实战

1-1、数据集介绍&数据集导入&分割数据集

# 加载imdb数据集
# 25000条训练和25000条测试数据
# 训练集和测试集都包含50%的正面评论和50%的负面评论。
from keras.datasets import imdb# 已经经历过预处理,评论,单词序列已经转化为整数序列。
# 加载数据:训练数据、训练标签;测试数据、测试标签。
# num_words=10000:保留训练数据中前10000个最常出现的单词,低频单词将被舍弃。这样得到的向量数据不会太大,便于处理。
(train_data,train_labels),(test_data,test_labels) = imdb.load_data(num_words=10000)# 查看训练数据
train_data[0:2]

输出:可以看到单词序列已经被转化为了整数序列,否则的话我们还需要手动搭建词典并且将其转化为整数序列。

1-2、字典的键值对颠倒&数字评论解码

# get_word_index: 是imdb自带的方法,获取字典。
# 将单词映射为整数索引的字典。
word_index = imdb.get_word_index()# 键值颠倒,将整数索引映射为单词。
# 颠倒之后,前边是整数索引,后边是对应的单词。
reverse_word_index = dict([(value, key) for (key, value) in word_index.items()])# 将评论解码,注意,索引减去了3,是因为012是特殊含义的字符。
decoded_review = ' '.join(# 根据整数索引,查找对应的单词,然后使用空格来进行连接,如果没有找到相关的索引,那就用问号代替[reverse_word_index.get(i - 3, '?') for i in train_data[0]])
# 看一下颠倒后的词典
print(reverse_word_index)
# 查看一下解码后的评论
print(decoded_review)

输出reverse_word_index

输出decoded_review:

1-3、将整数序列转化为张量(训练数据和标签)

# 我们不可以直接把训练数据对应的整数序列输入到神经网络中,所以我们需要先进行转换。
import numpy as np
def vectorize_sequences(sequences,dimension=10000):"""将整数序列转化为二进制矩阵的函数"""results = np.zeros((len(sequences), dimension))for i, sequences in enumerate(sequences):# 相应列上的元素置为1,其他位置上的元素都为0。results[i, sequences] = 1return results# 这里只是预处理的一种方式,即单词序列编码为二进制向量,当然也可以采用其他方式,
# 比如说直接填充列表,然后使其具有相同的长度,然后将其转化为张量,并且网络第一层使用能够处理这种整数张量的层,即Embedding层。
# 训练数据向量化,即将其转化为二进制矩阵
x_train = vectorize_sequences(train_data)
x_test = vectorize_sequences(test_data)
# 将标签向量化·············
y_train = np.asarray(train_labels).astype('float32')
y_test = np.asarray(test_labels).astype('float32')
# 查看一下训练集
x_train

输出

1-4、搭建神经网络&选择损失函数和优化器&划分出验证集

from keras import models
from keras import layersmodel = models.Sequential()
model.add(layers.Dense(16, activation='relu', input_shape=(10000,)))
model.add(layers.Dense(16, activation='relu'))
# 二分类问题的话,网络的最后一层应该是只有一个单元并且使用sigmoid激活的Dense层,输出是0-1范围内的标量,表示概率值。
model.add(layers.Dense(1, activation='sigmoid'))
# rmsprop通常是通用的优化器
model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy'])
x_val = x_train[:10000]
partial_x_train = x_train[10000:]y_val = y_train[:10000]
partial_y_train = y_train[10000:]

1-5、开始训练&绘制训练损失和验证损失&绘制训练准确率和验证准确率

epochs = 3history = model.fit(partial_x_train,partial_y_train,epochs=epochs,batch_size=512,validation_data=(x_val, y_val))

训练过程

绘制训练损失和验证损失

import plotly.express as px
import plotly.graph_objects as gohistory_dic = history.history
loss_val = history_dic['loss']
val_loss_values = history_dic['val_loss']
# epochs = range(1, len(loss_val)+1)
# np.linspace:作为序列生成器, numpy.linspace()函数用于在线性空间中以均匀步长生成数字序列
# 左闭右闭,所以是从整数120.
# 参数:起始、结束、生成的点
epochs = np.linspace(1, epochs, epochs)
fig = go.Figure()# Add traces
fig.add_trace(go.Scatter(x=epochs, y=loss_val,mode='markers',name='Training loss'))
fig.add_trace(go.Scatter(x=epochs, y=val_loss_values,mode='lines+markers',name='Validation loss'))
fig.show()

输出

绘制训练准确率和验证准确率

acc = history_dic['accuracy']
val_acc = history_dic['val_accuracy']
fig = go.Figure()# Add traces
fig.add_trace(go.Scatter(x=epochs, y=acc,mode='markers',name='Training acc'))
fig.add_trace(go.Scatter(x=epochs, y=val_acc,mode='lines+markers',name='Validation acc'))
fig.show()

输出

1-6、在测试集上验证准确率

# 两层隐藏层
# 隐藏单元: 16
# 训练20轮次,得到73的损失,85的准确率。
# 训练10轮次,得到41的损失,86的准确率。
# 训练5轮次,得到30的损失,87的准确率。
# 训练4轮次, 得到32的损失,86的准确率。
# 训练3轮次,得到29的损失,88.3的准确率。# 隐藏单元:32
# 训练4轮次,得到30的损失,87.9的准确率。# 隐藏单元:64
# 训练3轮次,得到30的损失,87.8的准确率。
model.evaluate(x_test, y_test)# model.predict(x_test): 得到测试集上评论为正面的可能性大小。

二、调参总结

调参总结
1、训练轮次:先选择较大的轮次,一般设置为20,观察数据在验证集上的表现,训练是为了拟合一般数据,所以当模型在验证集上准确率下降时,那就不要再继续训练了。
2、隐藏单元设置:二分类选择较小的单元数,如果是多分类的话,可以试着设置较大的单元数,比如说64、128等。
3、隐藏层数设置:同隐藏单元的设置规则,这里设置的层数较少,如果数据复杂,可以多加几层来观察数据的整体表现。
4、标签直接设置为one-hot编码时,则对应设置损失为categorical_crossentropy(分类交叉熵损失函数),若标签直接转化为张量,则对应设置损失为sparse_categorical_crossentropy(稀疏交叉熵损失)。


总结

呱呱呱。

(imdb数据集)电影评论分类实战:二分类问题相关推荐

  1. 基于Keras的IMDB数据集电影评论情感二分类

    原创不易,如果有转载需要的话,请在首行附上本文地址,谢谢. 第一步加载IMDB数据集,如若加载不成功,这里提供一种解决方法:点开IMDB数据下载链接(喜欢的话给个小星星和follow一下),fork到 ...

  2. 电影评论分类:二分类问题 —— R语言实现

    前言 在R和Python之间如何进行选择一直是一个热议的话题.机器学习世界也被不同语言偏好所划分.但是随着深度学习的盛行,天平逐渐向Python倾斜,因为截至目前为止Python具有大量R所没有的深度 ...

  3. 【深度学习kears+tensorflow】电影评论分类:二分类问题

    目录 Classifying movie reviews: a binary classification example 电影评论分类:二分类问题 The IMDB dataset IMDB 数据集 ...

  4. ML之xgboost:基于xgboost(5f-CrVa)算法对HiggsBoson数据集(Kaggle竞赛)训练实现二分类预测(基于训练好的模型进行新数据预测)

    ML之xgboost:基于xgboost(5f-CrVa)算法对HiggsBoson数据集(Kaggle竞赛)训练实现二分类预测(基于训练好的模型进行新数据预测) 目录 输出结果 设计思路 核心代码 ...

  5. Keras之DNN::基于Keras(sigmoid+binary_crossentropy+predict_classes)利用DNN实现二分类——DIY二分类数据集预测新数据点

    Keras之DNN::基于Keras(sigmoid+binary_crossentropy+predict_classes)利用DNN实现二分类--DIY二分类数据集&预测新数据点 目录 输 ...

  6. MosMedData: 新冠肺炎胸部 CT扫描数据集上基于3D-CNN实现二分类

    MosMedData: 新冠肺炎胸部 CT扫描数据集上基于3D-CNN实现二分类 作者: WangXi2016 日期: 2022.10.27 摘要: 本示例教程使用3D CNN实现CT数据二分类. 1 ...

  7. 『矩阵论笔记』线性判别分析(LDA)最全解读+python实战二分类代码+补充:矩阵求导可以参考

    线性判别分析(LDA)最全解读+python实战二分类代码! 文章目录 一.主要思想! 二.具体处理流程! 三.补充二中的公式的证明! 四.目标函数的求解过程! 4.1.优化问题的转化 4.2.拉格朗 ...

  8. ML之CatboostC:基于titanic泰坦尼克数据集利用catboost算法实现二分类

    ML之CatboostC:基于titanic泰坦尼克数据集利用catboost算法实现二分类 目录 基于titanic泰坦尼克数据集利用catboost算法实现二分类 设计思路 输出结果 核心代码 相 ...

  9. python 二分类的实例_keras分类之二分类实例(Cat and dog)

    1. 数据准备 在文件夹下分别建立训练目录train,验证目录validation,测试目录test,每个目录下建立dogs和cats两个目录,在dogs和cats目录下分别放入拍摄的狗和猫的图片,图 ...

  10. 电影评论分类:二分类问题

    根据电影评论的 文字内容将其划分为正面或负面. 使用IMDB 数据集,它包含来自互联网电影数据库(IMDB)的50 000 条严重两极分 化的评论.数据集被分为用于训练的25 000 条评论与用于测试 ...

最新文章

  1. 法向量影响光源照射物体后,物体产生的视觉感光效果
  2. 最全面试考点与面试技巧,大厂面经合集
  3. 下载java的jdk
  4. Bootstrap4代码模板
  5. php小程序的wxparse.js是什么,微信小程序如何解析HTML富文本(使用wxParse解析富文本的demo)...
  6. 在vivado hls软件上打开zynqnet工程,Vivado HLS Command Prompt(Vivado HLS 命令提示符)是什么
  7. 大数据“重磅炸弹”:实时计算框架 Flink
  8. python 利器_python利器之切片
  9. 对排名前3000位博主进行数据分析
  10. (转)c# Invoke和BeginInvoke区别
  11. 01 基本句型 + 补语
  12. 安装软件提示需要重启电脑的处理方法
  13. itest(爱测试) 4.3.1 发布,开源BUG 跟踪管理 amp; 敏捷测试管理软件
  14. 腾讯linux集成化界面,腾讯TOS系统今日开启内测:界面扁平化风格
  15. 我的互联网创业公司的第一笔收入磨难记
  16. Android 常用RGB值以及中英文名称
  17. FL STUDIO 21中文版已经发布啦,有什么新功能?
  18. XP系统的机械硬盘无法读取,Ntoskrnl.exe损坏硬盘锁定还是坏道?
  19. F5负载均衡综合实例详解
  20. Vulnhub-Zico2靶机实战

热门文章

  1. destoon 实用手册1
  2. 2021年电工(初级)考试及电工(初级)找解析
  3. ubuntu18 + QT + 动态库创建和调用+Plain C++ Aplication
  4. TinyXML中文文档
  5. could not open selected vm debug port (8700)解决方法
  6. ‘utf-8‘ codec can‘t decode byte 0x87 in position 10: invalid start byte 解决方案
  7. 派生词 计算机英语,英语词缀ex- (e-,ef- ) (I out,out of II former) 与派生词
  8. 互相关函数的频域计算
  9. Zend Framework 入门教程
  10. android 编译bin文件,Android编译自己的程序到/system/bin