深度学习(python)-Keras-2 电影评论分类:二分类问题

使用Python的Keras库来学习深度学习中的二分类问题 ------ IMDB。
IMDB它包含来自互联网电影数据库的50000条严重两级分化的评论,数据集被分为用于训练的25000条评论和用于测试的25000条评论,训练集和测试集都包含50%的正面评论和50%的负面评论。
电影评论

将评论解码为英文单词

用下面的代码解析第一条train_data[0]中的评论

# word_index is a dictionary mapping words to an integer index
word_index = imdb.get_word_index()
# We reverse it, mapping integer indices to words
reverse_word_index = dict([(value, key) for (key, value) in word_index.items()])
# We decode the review; note that our indices were offset by 3
# because 0, 1 and 2 are reserved indices for "padding", "start of sequence", and "unknown".
decoded_review = ' '.join([reverse_word_index.get(i - 3, '?') for i in train_data[0]])

print(decoded_review)

电影评论

训练网络

from keras.datasets import imdb
import numpy as np
from keras import models
from keras import layers
from keras import optimizers
from keras import losses
from keras import metrics
import matplotlib.pyplot as plt
from keras.utils import to_categorical

#加载IMDB数据集
(train_data,train_labels),(test_data,test_labels) = imdb.load_data(num_words=10000)

#将整数序列编码为二进制矩阵
def vectorize_sequences(sequences, dimension = 10000):
    results = np.zeros((len(sequences),dimension))
    for i, sequences in enumerate(sequences):
        results[i, sequences] = 1.
    return results

#将数据向量化
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')

#模型定义
model =models.Sequential()
model.add((layers.Dense(16, activation='relu', input_shape=(10000,))))
model.add(layers.Dense(16,activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))

#编译模型
model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])

#配置优化器
model.compile(optimizer=optimizers.RMSprop(lr=0.001),
              loss='binary_crossentropy',
              metrics=['accuracy'])

#使用自定义的损失和指标
model.compile(optimizer=optimizers.RMSprop(lr=0.001),
              loss=losses.binary_crossentropy,
              metrics=[metrics.binary_accuracy])

#留出验证集
x_val = x_train[:10000]
partial_x_train = x_train[10000:]

y_val = y_train[:10000]
partial_y_train = y_train[10000:]

#训练模型
model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['acc'])

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

#绘制训练损失和验证损失
history_dict = history.history
loss_values = history_dict['loss']
val_loss_values = history_dict['val_loss']

epochs = range(1, len(loss_values) + 1)

plt.plot(epochs,loss_values,'bo', label='Training loss')
plt.plot(epochs,val_loss_values,'b', label='Validation loss')
plt.title('Training and validation loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()

plt.show()

#绘制训练精度和验证精度
plt.clf()
acc = history_dict['acc']
val_acc = history_dict['val_acc']

plt.plot(epochs, acc, 'bo', label='Training acc')
plt.plot(epochs, val_acc, 'b', label='Validation acc')
plt.title('Training and validation accuracy')
plt.xlabel('Epochs')
plt.ylabel('Accuracy')
plt.legend()

plt.show()

电影评论1
电影评论2

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Keras是一个基于Python深度学习库,可以用于构建各种类型的神经网络模型。它可以用于文本分类任务,本文将介绍使用Keras实现文本分类的过程。 首先,我们需要准备数据集。一个常用的文本分类数据集是IMDB电影评论数据集,其中包含了来自互联网电影数据库的50,000个电影评论,其中25,000个用于训练,25,000个用于测试。每个评论都被标记为正面或负面。 在Keras中,我们可以使用Tokenizer类将文本转换为数字序列,每个单词对应一个数字。我们还需要对文本进行预处理,包括去除标点符号、停用词、转换为小写等操作。 接下来,我们可以使用Keras的Sequential模型定义我们的神经网络模型。对于文本分类任务,我们通常使用嵌入层将数字序列转换为向量表示,并添加全局池化层、Dropout层和全连接层。我们可以根据需要添加多个隐藏层。 最后,我们需要编译模型并训练它。我们可以选择不同的优化器、损失函数和评估指标。在训练期间,我们可以使用验证集来监视模型的性能,并根据需要进行调整。 下面是一个使用Keras进行文本分类的示例代码: ```python from keras.datasets import imdb from keras.preprocessing.text import Tokenizer from keras.preprocessing.sequence import pad_sequences from keras.models import Sequential from keras.layers import Embedding, GlobalMaxPooling1D, Dropout, Dense # 加载数据集 (x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=10000) # 将文本转换为数字序列 tokenizer = Tokenizer(num_words=10000) x_train = tokenizer.sequences_to_matrix(x_train, mode='binary') x_test = tokenizer.sequences_to_matrix(x_test, mode='binary') # 填充序列 x_train = pad_sequences(x_train, maxlen=100) x_test = pad_sequences(x_test, maxlen=100) # 定义模型 model = Sequential() model.add(Embedding(input_dim=10000, output_dim=32, input_length=100)) model.add(GlobalMaxPooling1D()) model.add(Dropout(0.5)) model.add(Dense(1, activation='sigmoid')) # 编译模型 model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) # 训练模型 model.fit(x_train, y_train, validation_split=0.2, epochs=10, batch_size=128) # 评估模型 score = model.evaluate(x_test, y_test, batch_size=128) print('Test loss:', score[0]) print('Test accuracy:', score[1]) ``` 在这个示例中,我们使用了嵌入层将数字序列转换为向量表示,并添加了全局池化层、Dropout层和全连接层。我们使用了Adam优化器、二元交叉熵损失函数和精度评估指标。我们使用了20%的训练数据作为验证集,并在10个时期内训练模型。最后,我们评估了模型在测试集上的性能。 这只是一个简单的示例,你可以根据需要调整模型架构、优化器、损失函数和评估指标等。通过使用Keras,你可以很容易地构建和训练各种类型的神经网络模型,包括文本分类模型。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值