用 PyTorch 实现一个简单的神经网络

本文记录如何用 PyTorch 从零实现一个简单的两层神经网络。

环境准备

pip install torch numpy

网络结构

我们构建一个简单的全连接网络:

  • 输入层:2 个神经元
  • 隐藏层:4 个神经元(ReLU 激活)
  • 输出层:1 个神经元(Sigmoid 激活)

代码实现

import torch
import torch.nn as nn

class SimpleNet(nn.Module):
    def __init__(self):
        super().__init__()
        self.layer1 = nn.Linear(2, 4)
        self.relu = nn.ReLU()
        self.layer2 = nn.Linear(4, 1)
        self.sigmoid = nn.Sigmoid()

    def forward(self, x):
        x = self.layer1(x)
        x = self.relu(x)
        x = self.layer2(x)
        x = self.sigmoid(x)
        return x

# 创建模型
model = SimpleNet()
print(model)

训练循环

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

for epoch in range(1000):
    output = model(X_train)
    loss = criterion(output, y_train)

    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

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

小结

通过这个简单的例子,我们理解了:

  • nn.Module 的基本用法
  • 前向传播的定义方式
  • 损失函数和优化器的配合

下一步可以尝试加入更多层、使用不同的激活函数、或者换用更复杂的数据集。