本文记录如何用 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的基本用法- 前向传播的定义方式
- 损失函数和优化器的配合
下一步可以尝试加入更多层、使用不同的激活函数、或者换用更复杂的数据集。