机器学习
该笔记为学习机器学习课程时所涉及到的知识点的总结,观看视频为李宏毅2021/2022春机器学习课程,而在该课程中主要涉猎的是机器学习中的深度学习领域。
PyTorch
基本概念
Dataset & DataLoader
约 435 个字 118 行代码 预计阅读时间 5 分钟
for batch_data, batch_labels in dataloader:
# batch_data: 一批输入数据
# batch_labels: 对应的标签
...
```
Tensor
Tensor是PyTorch中用于存储和操作数据的类,可以理解为numpy中的ndarray。
可以直接输入数据创建tensor,也可以通过使用torch.zeros、torch.ones、torch.rand、torch.randn等函数创建。
# 直接从数据创建
x = torch.tensor([[1, -1], [-1, 1]])
# 从numpy数组创建
x = torch.from_numpy(np.array([[1, -1], [-1, 1]]))
# 创建全零张量
x = torch.zeros([2, 2])
# 创建全一张量
x = torch.ones([1, 2, 5])
常见的张量操作包括:
# 求和
y = x.sum()
# 求平均
y = x.mean()
# 加法
z = x + y
# 减法
z = x - y
# 幂运算
y = x.pow(2)
张量形状操作:
1. transpose:转置指定维度
x = torch.zeros([2, 3])
x = x.transpose(0, 1) # 从[2,3]变为[3,2]
2. squeeze:移除长度为1的维度
x = torch.zeros([1, 2, 3])
x = x.squeeze(0) # 从[1,2,3]变为[2,3]
3. unsqueeze:增加新的维度
x = torch.zeros([2, 3])
x = x.unsqueeze(1) # 从[2,3]变为[2,1,3]
4. cat:连接多个张量
x = torch.zeros([2, 1, 3])
y = torch.zeros([2, 3, 3])
z = torch.zeros([2, 2, 3])
w = torch.cat([x, y, z], dim=1) # dim=1维度上拼接
张量可以在CPU或GPU上运行:
# 移动到CPU
x = x.to('cpu')
# 移动到GPU
x = x.to('cuda')
# 检查是否有GPU
torch.cuda.is_available()
神经网络构建
损失函数与优化器
模型训练流程
# 数据加载
dataset = MyDataset(file)
tr_set = DataLoader(dataset, batch_size=16, shuffle=True)
# 模型初始化
model = MyModel().to(device)
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
for epoch in range(n_epochs):
model.train()
for x, y in tr_set:
optimizer.zero_grad()
x, y = x.to(device), y.to(device)
pred = model(x)
loss = criterion(pred, y)
loss.backward()
optimizer.step()
model.eval()
with torch.no_grad():
for x, y in val_set:
x, y = x.to(device), y.to(device)
pred = model(x)
# 计算验证指标
模型保存与加载
# 保存模型
torch.save(model.state_dict(), 'model.pth')
# 加载模型
model.load_state_dict(torch.load('model.pth'))
PDF 资料