反向传播算法代码

发布时间 2023-11-14 11:42:25作者: 黑逍逍
import torch
import torch.nn as nn
import torch.optim as optim

class MLPModel(nn.Module):
    def __init__(self, input_size):
        super(MLPModel, self).__init__()
        self.fc1 = nn.Linear(input_size, 128)
        self.fc2 = nn.Linear(128, 64)
        self.fc3 = nn.Linear(64, 2)
        self.sigmoid = nn.Sigmoid()

    def forward(self, x):
        x = torch.relu(self.fc1(x))
        x = torch.relu(self.fc2(x))
        x = self.fc3(x).float()
        x = self.sigmoid(x)
        return x

# 创建模型
input_size =  # 你的输入大小
model = MLPModel(input_size)

# 定义损失函数和优化器
criterion = nn.BCELoss()  # 二分类交叉熵损失函数适用于Sigmoid输出
optimizer = optim.Adam(model.parameters(), lr=0.001)  # Adam优化器,可以根据需要调整学习率

# 训练循环
num_epochs = 10  # 你可以根据需要调整训练的轮数

for epoch in range(num_epochs):
    # 训练模式
    model.train()

    # 假设你有训练数据 DataLoader,可以使用迭代器逐批次提供数据
    for inputs, labels in train_dataloader:
        # 清零梯度
        optimizer.zero_grad()

        # 前向传播
        outputs = model(inputs)

        # 计算损失
        loss = criterion(outputs, labels)

        # 反向传播
        loss.backward()

        # 优化步骤
        optimizer.step()

    # 打印每个epoch的损失
    print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item()}')

# 训练完成后,你可以保存模型或者用于测试和推理