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

IMDB数据集下载速度慢,可以在我的[repo库](> IMDB数据集下载速度慢,可以在我的repo库中找到下载,下载后放到/.keras/datasets/目录下,即可正常运行。)中找到下载,下载后**放到/.keras/datasets/目录下**,即可正常运行。

电影评论分类:二分类

二分类可能是机器学习最常解决的问题。我们将基于评论的内容将电影评论分类:正类和负类。

IMDB数据集

IMDB数据集有5万条来自网络电影数据库的评论;其中2万5千条用来训练,2万5千条用来测试,每个部分正负评论各占50%.
划分训练集、测试集的必要性:不能在相同的数据集上对机器学习模型进行测试。因为在训练集上模型表现好并不意味着泛化能力好(在没有见过的数据上仍然表现良好),而我们关心的是模型的泛化能力.
和MNIST数据集类似,IMDB数据集也集成在Keras中,同时经过了预处理:电影评论转换成了一系列数字,每个数字代表字典中的一个单词。

加载数据集

from keras.datasets import imdb

(train_data,train_labels),(test_data,test_labels) = imdb.load_data(num_words=10000)

num_words=10000意味着只保留训练集中最常出现的前10000个词,不经常出现的单词被抛弃—最终所有评论的维度保持相同。
变量train_data,test_data是电影评论的列表,每条评论由数字(对应单词在词典中出现的位置下标)列表组成。train_labels,test_labels是0,1列表,0负面评论,1表示正面评论。

>>> train_data[0]
[1, 14, 22, 16, ... 178, 32]
>>> train_labels[0]
1

预处理数据

不能直接将list类型的数据送到神经网络中训练,必须将list类型转换为tensor张量类型。有两种转换方式:

  • 填充列表使每个列表长度都相同,然后转换为整数类型的张量,形状为(samples, word_indices),使用张量作为神经网络的第一层(Embedding层,能处理这样的整数类型张量);
  • 将列表进行one-hot编码,转换成0、 1向量。然后用Dense网络层作为神经网络的第一层,处理浮点类型向量数据。
import numpy as np

def vectorize_sequences(sequences, dimension=10000):
	results = np.zeros((len(sequences), dimension)) #数据集长度,每个评论维度10000
	for i, sequence in enumerate(sequences):
		results[i, sequence] = 1 # one-hot
	return results

x_train = vectorize_sequences(
  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,以下是使用循环神经网络(RNN)对IMDB电影评论数据集进行文本情感分类的代码: ```python import tensorflow as tf from tensorflow.keras.datasets import imdb from tensorflow.keras.layers import Embedding, LSTM, Dense from tensorflow.keras.models import Sequential from tensorflow.keras.preprocessing import sequence # 设置超参数 max_features = 20000 # 只考虑最常见的20,000个单词 max_len = 80 # 每个评论最多包含80个单词 embedding_size = 128 # 词向量的维度 # 加载IMDB电影评论数据集 (x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features) # 对数据进行预处理 x_train = sequence.pad_sequences(x_train, maxlen=max_len) x_test = sequence.pad_sequences(x_test, maxlen=max_len) # 构建模型 model = Sequential() model.add(Embedding(max_features, embedding_size, input_length=max_len)) model.add(LSTM(units=128)) model.add(Dense(units=1, activation='sigmoid')) # 编译模型 model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) # 训练模型 model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data=(x_test, y_test)) ``` 这个代码中,我们首先导入了所需的库和类。然后,我们设置了一些超参数,包括每个评论最多包含的单词数、词向量的维度和我们要考虑的最常见的单词数。 接下来,我们使用 `imdb.load_data()` 函数从Keras中加载IMDB电影评论数据集,并将其分成训练集和测试集。 然后,我们对数据进行了预处理,使用 `sequence.pad_sequences()` 函数将每个评论的长度统一设置为 `max_len`,并使用零值填充序列。 接着,我们构建了一个简单的RNN模型,包括一个嵌入层、一个LSTM层和一个全连接层。我们使用 `model.compile()` 函数来编译模型,指定了损失函数、优化器和评价指标。 最后,我们使用 `model.fit()` 函数来训练模型,并在测试集上进行了验证。在这个例子中,我们将模型训练了5个epoch,使用批大小为32。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值