简单的全连接神经网络(Fully Connected Network):

  • __init__():定义网络层。
  • forward():定义数据的前向传播过程。
import torch
import torch.nn as nn
import torch.optim as optim

# 生成一些随机数据  
n_samples = 100  
data = torch.randn(n_samples, 2)  # 生成 100 个二维数据点  
labels = (data[:, 0]**2 + data[:, 1]**2 < 1).float().unsqueeze(1)  # 点在圆内为1,圆外为0

# 定义一个简单的神经网络模型
class SimpleNN(nn.Module):
    def __init__(self):
        super(SimpleNN, self).__init__()
        # 定义一个输入层到隐藏层的全连接层
        self.fc1 = nn.Linear(2, 2)  # 输入 2 个特征,输出 2 个特征
        # 定义一个隐藏层到输出层的全连接层
        self.fc2 = nn.Linear(2, 1)  # 输入 2 个特征,输出 1 个预测值
    
    def forward(self, x):
        # 前向传播过程
        x = torch.relu(self.fc1(x))  # 使用 ReLU 激活函数
        x = self.fc2(x)  # 输出层
        return x

# 创建模型实例
model = SimpleNN()

# 定义损失函数和优化器  
criterion = nn.BCELoss()  # 二元交叉熵损失  
optimizer = optim.SGD(model.parameters(), lr=0.1)  # 使用随机梯度下降优化器  
  
# 训练  
epochs = 100  
for epoch in range(epochs):  
    # 前向传播  
    outputs = model(data)  
    loss = criterion(outputs, labels)  
  
    # 反向传播  
    optimizer.zero_grad()  
    loss.backward()  
    optimizer.step()  
  
    # 每 10 轮打印一次损失  
    if (epoch + 1) % 10 == 0:  
        print(f'Epoch [{epoch + 1}/{epochs}], Loss: {loss.item():.4f}')