1. 深度学习实战:分类与回归问题解析
在深度学习的实际应用中,分类和回归是最常见的两类任务。本章将通过三个典型案例,带你深入理解神经网络如何解决实际问题:电影评论情感分析(二元分类)、新闻主题分类(多类分类)和房价预测(标量回归)。这些案例不仅展示了完整的机器学习工作流程,更揭示了模型训练中的关键问题和解决方案。
1.1 电影评论情感分析:二元分类实战
1.1.1 数据集理解与预处理
IMDb数据集包含50,000条电影评论,其中25,000条用于训练,25,000条用于测试,均匀分布着正面和负面评价。每条评论已被预处理为整数序列,每个整数对应词典中的一个单词。
python复制from keras.datasets import imdb
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)
这里num_words=10000表示仅保留数据集中最常见的10,000个单词,这既能控制数据维度,又能过滤掉低频噪声词汇。数据加载后,每条评论表现为一个整数列表:
python复制>>> train_data[0]
[1, 14, 22, 16, ..., 178, 32]
>>> train_labels[0] # 1表示正面评价
1
1.1.2 数据向量化技术
神经网络需要固定维度的输入,我们需要将变长序列转换为统一格式。多热编码(Multi-hot Encoding)是一种有效方法,它将每个评论转换为10,000维的二进制向量(对应10,000个单词),出现单词的位置设为1,其余为0。
python复制import numpy as np
def multi_hot_encode(sequences, num_classes):
results = np.zeros((len(sequences), num_classes))
for i, sequence in enumerate(sequences):
results[i, sequence] = 1.0
return results
x_train = multi_hot_encode(train_data, num_classes=10000)
x_test = multi_hot_encode(test_data, num_classes=10000)
这种表示虽然丢失了词序信息,但对于简单的情绪分析已经足够。标签已经是0和1的数组,只需转换为浮点类型:
python复制y_train = train_labels.astype('float32')
y_test = test_labels.astype('float32')
1.1.3 模型架构设计与训练
我们采用三层全连接网络:
- 两个隐藏层(16个单元,ReLU激活)
- 输出层(1个单元,Sigmoid激活)
python复制from keras import models
from keras import layers
model = models.Sequential([
layers.Dense(16, activation
