动手学深度学习学习笔记
在学习深度学习的过程中,李沐的《动手学深度学习》一书为我提供了一个非常清晰和系统的学习框架。在这本书中,通过大量实践的案例来帮助读者深入理解深度学习的核心概念,使得学习过程更加生动。下面是我在阅读过程中总结的一些关键点和代码示例。
1. 深度学习基础
深度学习是机器学习的一个子领域,利用多层神经网络来进行数据建模和预测。与传统的机器学习方法不同,深度学习能够从原始数据中自动提取特征,减少了特征工程的复杂性。
1.1 神经网络的基本结构
一个基本的神经网络包含输入层、隐藏层和输出层。每一层由若干个神经元组成,神经元之间通过权重连接。
以下是一个简单的神经网络的实现示例,使用的是Python中的PyTorch
库:
import torch
import torch.nn as nn
import torch.optim as optim
# 定义神经网络模型
class SimpleNN(nn.Module):
def __init__(self):
super(SimpleNN, self).__init__()
self.fc1 = nn.Linear(2, 4) # 输入层到隐藏层
self.fc2 = nn.Linear(4, 1) # 隐藏层到输出层
def forward(self, x):
x = torch.relu(self.fc1(x)) # 使用ReLU激活函数
x = torch.sigmoid(self.fc2(x)) # 使用Sigmoid激活函数
return x
# 实例化模型
model = SimpleNN()
print(model)
2. 数据准备与处理
在深度学习中,数据的准备和处理是至关重要的。我们通常需要对数据进行归一化,以加速模型的收敛。常用的归一化方法为Min-Max归一化和Z-Score归一化。
2.1 数据加载
我们可以使用torchvision
库来加载数据集,处理常见的图像数据。在这里我们以 CIFAR-10 数据集为例:
import torchvision.transforms as transforms
import torchvision.datasets as datasets
from torch.utils.data import DataLoader
# 数据预处理
transform = transforms.Compose([
transforms.ToTensor(), # 转化为Tensor
transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)), # 数据归一化
])
# 加载CIFAR-10数据集
train_dataset = datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
train_loader = DataLoader(dataset=train_dataset, batch_size=64, shuffle=True)
3. 模型训练
训练模型的关键是前向传播和反向传播。在模型训练过程中,我们会不断更新模型的参数以最小化损失函数。
3.1 定义损失函数和优化器
损失函数用来衡量模型的输出与真实标签之间的差距,而优化器可以根据损失的梯度信息来更新模型的参数。
criterion = nn.CrossEntropyLoss() # 交叉熵损失函数
optimizer = optim.Adam(model.parameters(), lr=0.001) # Adam优化器
3.2 训练过程
下面是一个简化的训练过程示例:
num_epochs = 5
for epoch in range(num_epochs):
for images, labels in train_loader:
optimizer.zero_grad() # 清空梯度
outputs = model(images) # 前向传播
loss = criterion(outputs, labels) # 计算损失
loss.backward() # 反向传播
optimizer.step() # 更新参数
print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')
4. 总结
通过学习《动手学深度学习》,我更加深入地理解了深度学习模型的构建与训练。从数据的准备到模型的训练,再到结果的评估,这一过程为我后续的研究和工程实践打下了坚实的基础。未来我将继续探索更多复杂的网络结构和应用场景,提升自己的深度学习技能。