第三章 神经网络入门

1.IMDB数据集[电影评论分类]--二分类问题

下面展示一些 内联代码片

""" 
IMDB数据集(电影评论分类)--二分类问题 
"""
# 1.加载IMDB数据集
from keras.datasets import imdb
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)
print(train_data[0])
print(train_labels[0])

a = max([max(sequence) for sequence in train_data])  # 查看索引
print(a)


# 解码为英文单词
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]])


# 2.预处理-准备数据:将整数序列编码为二进制矩阵
import numpy as np

def vectorize_sequences(sequences, dimension=10000):
    results = np.zeros((len(sequences), dimension))  # 创建一个2D的0矩阵
    for i, sequence in enumerate(sequences):
        results[i, sequence] = 1.                # 将results[i]的索引设为1
    return results

x_train = vectorize_sequences(train_data)        # 将训练数据向量化
x_test = vectorize_sequences(test_data)          # 将测试数据向量化
print(x_train[0])

# 标签编码
y_train = np.asarray(train_labels).astype('float32')  # 将训练标签向量化
y_test = np.asarray(test_labels).astype('float32')    # 将测试标签向量化


# 3.构建网络:定义模型、编译模型、训练模型
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(16, activation='relu'))        # 第二个隐藏层的激活函数:relu
model.add(layers.Dense(1, activation='sigmoid'))      # 输出层的激活函数:sign
model.summary()


from keras import losses
from keras import metrics


# 将原始数留出10000个作为验证集
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',              # rmsprop优化器
              loss='binary_crossentropy',       # 损失函数:二元交叉熵
              metrics=['acc'])                  # 指标:精度

History = model.fit(partial_x_train,          # 训练数据
                    partial_y_train,
                    epochs = 20,              # 迭代次数20
                    batch_size = 512,         # 512个样本的小批量
                    validation_data =(x_val, y_val))   # 将验证数据传入validation_data()来完成

history_dict = History.history  # 是一个字典,包含训练过程中的所有数据
print(history_dict.keys())      # dict_keys(['val_loss', 'val_acc', 'loss', 'acc'])


# 4.绘制训练损失和验证损失
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, 'r', 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, 'r', label='Training acc')
plt.plot(epochs, val_acc, 'b', label='Validation acc')
plt.title('Training and Validation accurary')
plt.xlabel('Epochs')
plt.ylabel('Accurary')
plt.legend()
plt.show()


# 5.从头开始重新训练一个模型
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.summary()

model.compile(optimizer='rmsprop',               # rmsprop优化器
              loss='binary_crossentropy',        # 损失函数:二元交叉熵
              metrics=['accuracy'])              # 指标:精度

model.fit(x_train, y_train, epochs=4, batch_size=512)     # 训练模型(迭代次数改变为4)
results = model.evaluate(x_test, y_test)                  # 评估测试数据
print(results)

model.predict(x_test)     # 预测

 

代码结果:无

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值