import torch
import torch.nn as nn
import torch.optim as optim
'''定义模拟数据集'''
inputs = torch.randn(5, 10) # 定义5个样本,每个样本的特征数位10
labels = torch.tensor([0, 1, 0, 1, 1]) # 每个样本的标签,二分类,所以为0或1
'''定义模型'''
class SimpleModel(nn.Module):
def __init__(self, input_size, output_size=1):
super().__init__()
self.linear = nn.Linear(input_size, output_size)
self.sigmoid = nn.Sigmoid()
def forward(self, x):
x = self.linear(x)
x = self.sigmoid(x)
return x
'''实例化模型'''
model = SimpleModel(input_size=10, output_size=1)
'''定义二元交叉熵损失函数'''
criterion = nn.BCELoss()
'''定义优化器'''
optimizer = optim.SGD(model.parameters(), lr=0.01)
'''训练'''
epoch = 50000
for i in range(epoch):
'''前向传播'''
# 执行过程中遇到shape报错:纠正后加了一个reshape(-1)
y = model(inputs).reshape(-1)
'''计算损失'''
# 执行过程中遇到数据类型报错,因此加了一个.float()
loss = criterion(y.float(), labels.float())
print(f'Epoch: {i + 1}/{epoch}, Loss: {loss.item()}')
'''反向传播 和 更新参数'''
optimizer.zero_grad() # 梯度清零
loss.backward() # 计算梯度
optimizer.step() # 更新参数