🗂️ 一、项目结构概览

我们将做的事情包括:

  1. 生成模拟数据
  2. 定义神经网络结构
  3. 选择损失函数和优化器
  4. 训练模型
  5. 评估效果
  6. 保存与加载模型

📌 二、环境准备

pip install torch


💾 三、生成模拟数据(简单线性关系)

import torch
import matplotlib.pyplot as plt

# 模拟数据:y = 3x + 2 + 噪声
torch.manual_seed(0)
x = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1)  # shape: (100, 1)
y = 3 * x + 2 + 0.2 * torch.rand(x.size())

# 可视化
plt.scatter(x.numpy(), y.numpy())
plt.title("训练数据分布")
plt.show()


🧠 四、定义神经网络结构

import torch.nn as nn

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.hidden = nn.Linear(1, 10)  # 输入1维,隐藏层10维
        self.relu = nn.ReLU()
        self.output = nn.Linear(10, 1)  # 输出1维(回归)

    def forward(self, x):
        x = self.hidden(x)
        x = self.relu(x)
        x = self.output(x)
        return x

model = Net()
print(model)


🎯 五、定义损失函数和优化器

import torch.optim as optim

criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.1)


🔁 六、训练神经网络

for epoch in range(200):
    prediction = model(x)              # 前向传播
    loss = criterion(prediction, y)    # 计算损失

    optimizer.zero_grad()              # 梯度清零
    loss.backward()                    # 反向传播
    optimizer.step()                   # 参数更新

    if epoch % 20 == 0:
        print(f'Epoch {epoch}, Loss: {loss.item():.4f}')


📊 七、可视化效果

pred = model(x).detach()
plt.scatter(x.numpy(), y.numpy(), label='真实数据')
plt.plot(x.numpy(), pred.numpy(), 'r-', label='预测结果')
plt.legend()
plt.title("训练结果")
plt.show()


💾 八、保存与加载模型

# 保存模型参数
torch.save(model.state_dict(), 'mymodel.pth')

# 加载模型参数
model.load_state_dict(torch.load('mymodel.pth'))
model.eval()


✅ 九、小结

步骤内容
数据准备自定义或使用数据集
网络结构定义一个 nn.Module
损失函数nn.MSELoss()
优化器optim.SGD().backward().step()
可视化使用 matplotlib
保存模型torch.save()torch.load()

🧪 十、挑战建议(练手)

  1. 修改网络结构:增加层数或神经元数量
  2. 尝试使用 nn.Sequential 重写网络
  3. 使用 optim.Adam() 替代 SGD
  4. 修改任务为分类(比如二分类)