深度学习入门——电影评论分类

1项目简介

1.1 前言:

IMDB评论分类于MNIST手写数字一样,作为人工智能的 helloworld,是入人工智能领域的初级关卡。

1.2  数据集简介

IMDB数据集包含50000条评论,正面和负面各占50%,其中,25000用于训练,剩下的25000条用于测试集,与MNIST同样,内置于keras库中(第一次运行下载80M左右),

import keras
print(keras.__version__)
>>2.13.1
from keras.datasets import imdb
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(
 num_words=10000)  

加载数据集,并保存前10000个高频单词(训练的最最原始依据)。

2数据预处理

word_index=imdb.get_word_index()
reverse_word_index=dict([(value,key) for(key,value)in word_index.items()])
decoded_review = ' '.join(
 [reverse_word_index.get(i - 3, '?') for i in train_data[0]])

这段代码非常有意思,将整数编码转换为相关的单词字符,在索引的0、1、2表示“填充”、“序列开始”、“未知词”。

3模型搭建

3.1向量化处理

import numpy as np
def vectorize_sequences(sequences,dimension=10000):
  results=np.zeros((len(sequences),dimension))
  for i,sequence in enumerate(sequences):
    results[i,sequence]=1.0
  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')

整数编码转换成二进制矩阵、方便批处理

3.2 神经网络结构

from keras import models
from keras import layers

model=models.Sequential()
model.add(layers.Dense(16,activation='relu',input_shape=(10000,)))
model.add(layers.Dense(1,activation='sigmoid'))
#搭建优化器与损失函数
model.compile(optimizer='rmsprop',
        loss='crossentropy',
        metrics=['accuracy']
        )
from keras import optimizers
model.compile(optimizer=optimizers.RMSprop(learning_rate=0.01),
      loss='crossentropy',
        metrics=['accuracy']
        )
#优化器
#损失函数
from keras import losses
from keras import metrics
model.compile(optimizer=optimizers.RMSprop(learning_rate=0.001),
 loss=losses.binary_crossentropy,
 metrics=[metrics.binary_accuracy])

肥肠的简单!都是相关函数的调用,多练几次就慢慢熟悉了,没必要一次都记住。

3.3 设定验证集

x_val = x_train[:10000]
partial_x_train = x_train[10000:]
y_val = y_train[:10000]
partial_y_train = y_train[10000:]

4 训练模型

4.1

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))

4.2 损失、精度可视化呈现

import matplotlib.pyplot as plt
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')  # 'bo'表示蓝色原点 'b'表示蓝色实线
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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值