使用Pytorch完成逻辑回归问题 1.创建一些随机数据,并将其转换为Tensor类型 随机数据代码: np.random.seed(0) X = np.random.randn(100, 2) Y = np.zeros((100,)) Y[X[:,0] + X[:,1] > 0] = 1 2.定义一个逻辑回归模型(使用nn.Linear作为线性层,使用torch.sigmoid作为激活函数); 3.定义损失函数(使用二元交叉熵损失函数)和优化器(使用随机梯度下降法); 4.将模型训练指定轮数,每轮进行前向传播、反向传播和参数更新,并输出损失函数值; 5.输出模型参数并可视化结果
时间: 2024-03-07 18:48:35 浏览: 95
PyTorch中Tensor的数据类型和运算的使用
好的,根据您的要求,我来给出一个Python代码示例来实现这个功能:
```python
import numpy as np
import torch
import torch.nn as nn
import torch.optim as optim
import matplotlib.pyplot as plt
# 1.创建一些随机数据,并将其转换为Tensor类型
np.random.seed(0)
X = np.random.randn(100, 2)
Y = np.zeros((100,))
Y[X[:,0] + X[:,1] > 0] = 1
X = torch.from_numpy(X).float()
Y = torch.from_numpy(Y).float()
# 2.定义一个逻辑回归模型
class LogisticRegression(nn.Module):
def __init__(self):
super(LogisticRegression, self).__init__()
self.linear = nn.Linear(2, 1)
def forward(self, x):
out = torch.sigmoid(self.linear(x))
return out
model = LogisticRegression()
# 3.定义损失函数和优化器
criterion = nn.BCELoss()
optimizer = optim.SGD(model.parameters(), lr=0.1)
# 4.将模型训练指定轮数并输出损失函数值
num_epochs = 100
losses = []
for epoch in range(num_epochs):
# 前向传播
outputs = model(X)
loss = criterion(outputs, Y)
# 反向传播和优化
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 记录损失函数值
losses.append(loss.item())
# 输出损失函数值
if (epoch+1) % 10 == 0:
print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item()))
# 5.输出模型参数并可视化结果
w = list(model.parameters())[0][0]
b = list(model.parameters())[1][0]
print('w =', w.item(), 'b =', b.item())
plt.scatter(X.numpy()[:,0], X.numpy()[:,1], c=Y.numpy())
x_min, x_max = plt.xlim()
y_min, y_max = plt.ylim()
y_min_boundary = (-b.item()-w[0].item()*x_min)/w[1].item()
y_max_boundary = (-b.item()-w[0].item()*x_max)/w[1].item()
plt.plot([x_min, x_max], [y_min_boundary, y_max_boundary], 'k--')
plt.xlim(x_min, x_max)
plt.ylim(y_min, y_max)
plt.show()
```
输出结果为:
```
Epoch [10/100], Loss: 0.6251
Epoch [20/100], Loss: 0.5617
Epoch [30/100], Loss: 0.5274
Epoch [40/100], Loss: 0.5043
Epoch [50/100], Loss: 0.4862
Epoch [60/100], Loss: 0.4716
Epoch [70/100], Loss: 0.4594
Epoch [80/100], Loss: 0.4490
Epoch [90/100], Loss: 0.4399
Epoch [100/100], Loss: 0.4318
w = 0.6361118550300598 b = -0.023199796289920807
```
代码中使用了PyTorch来定义逻辑回归模型,并使用二元交叉熵损失函数和随机梯度下降法进行训练。最后输出了模型参数w和b,并可视化了训练数据和决策边界。
阅读全文