![]()
![]()
![]()
![]()
import torch
import torch.nn as nn
import torch.optim as optim
# 定义简单线性回归模型
class LinearRegression(nn.Module):
def __init__(self):
super(LinearRegression, self).__init__()
self.linear = nn.Linear(1, 1) # 输入维度1,输出维度1
def forward(self, x):
return self.linear(x)
# 生成模拟数据
x = torch.tensor([[1.0], [2.0], [3.0], [4.0]], dtype=torch.float32)
y = torch.tensor([[2.0], [4.0], [6.0], [8.0]], dtype=torch.float32)
# 初始化模型、损失函数和优化器
model = LinearRegression()
criterion = nn.MSELoss() # 均方误差损失
optimizer = optim.SGD(model.parameters(), lr=0.01) # 随机梯度下降
# 训练循环
epochs = 1000
for epoch in range(epochs):
# 前向传播
outputs = model(x)
loss = criterion(outputs, y)
# 反向传播和优化
optimizer.zero_grad() # 清零梯度
loss.backward() # 计算梯度
optimizer.step() # 更新参数
# 打印进度
if (epoch+1) % 100 == 0:
print(f'Epoch [{epoch+1}/{epochs}], Loss: {loss.item():.4f}')
# 输出最终参数
print(f'Weight: {model.linear.weight.item():.4f}, Bias: {model.linear.bias.item():.4f}')
-
学习率调整:
- 初始学习率过大导致震荡,过小导致收敛缓慢。
- 使用学习率调度器(如 StepLR、ReduceLROnPlateau)动态调整。
-
批量大小选择:
- 大批量(如 256):训练稳定,但可能陷入较差的局部最优。
- 小批量(如 32):引入随机性,有助于跳出局部最优,但训练速度慢。
-
正则化:
- L2 正则化(权重衰减):防止过拟合,改善泛化能力。
- Dropout:随机丢弃神经元,增强模型鲁棒性。
-
早停(Early Stopping):
最小化损失函数是机器学习训练的核心目标,通过梯度下降等优化算法迭代更新模型参数。实际应用中需根据任务类型选择合适的损失函数和优化器,并注意解决梯度消失、过拟合等问题,以达到良好的模型性能。