用pytorch实现logistic回归
时间: 2023-05-19 21:05:42 浏览: 53
可以使用以下代码实现:
```
import torch
import torch.nn as nn
import torch.optim as optim
# 定义 Logistic Regression 模型
class LogisticRegression(nn.Module):
def __init__(self, input_dim):
super(LogisticRegression, self).__init__()
self.linear = nn.Linear(input_dim, 1)
def forward(self, x):
out = self.linear(x)
out = torch.sigmoid(out)
return out
# 定义训练函数
def train(model, train_loader, criterion, optimizer, num_epochs):
for epoch in range(num_epochs):
for i, (inputs, labels) in enumerate(train_loader):
inputs = inputs.float()
labels = labels.float()
# 前向传播
outputs = model(inputs)
loss = criterion(outputs, labels)
# 反向传播和优化
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 每 100 步打印一次损失值
if (i+1) % 100 == 0:
print('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, i+1, len(train_loader), loss.item()))
# 定义数据集和数据加载器
train_dataset = torch.utils.data.TensorDataset(torch.randn(100, 10), torch.randint(0, 2, (100, 1)).float())
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=10, shuffle=True)
# 定义模型、损失函数和优化器
model = LogisticRegression(10)
criterion = nn.BCELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)
# 训练模型
train(model, train_loader, criterion, optimizer, num_epochs=10)
```
这段代码实现了一个简单的 Logistic Regression 模型,使用随机生成的数据进行训练。其中,`train_dataset` 是一个包含 100 个样本的数据集,每个样本有 10 个特征和一个二分类标签。`train_loader` 是一个数据加载器,用于将数据集分成多个 batch 进行训练。`LogisticRegression` 类定义了模型的结构,`train` 函数定义了训练过程。在训练过程中,使用了二分类交叉熵损失函数和随机梯度下降优化器。