PyTorch实现多维度特征输入逻辑回归
作者:心?升明月 时间:2022-08-08 02:56:41
一、实现过程
1、准备数据
本文数据采取文献[1]给出的数据集,该数据集前8列为特征,最后1列为标签(0/1)。本模型使用pandas处理该数据集,需要注意的是,原始数据集没有特征名称,需要自己在第一行添加上去,否则,pandas会把第一行的数据当成特征名称处理,从而影响最后的分类效果。
代码如下:
# 1、准备数据
import torch
import pandas as pd
import numpy as np
xy = pd.read_csv('G:/datasets/diabetes/diabetes.csv',dtype=np.float32) # 文件路径
x_data = torch.from_numpy(xy.values[:,:-1])
y_data = torch.from_numpy(xy.values[:,[-1]])
2、设计模型
本文采取文献[1]的思路,激活函数使用ReLU,最后一层使用Sigmoid
函数,
代码如下:
class Model(torch.nn.Module):
def __init__(self):
super(Model,self).__init__()
self.linear1 = torch.nn.Linear(8,6)
self.linear2 = torch.nn.Linear(6,4)
self.linear3 = torch.nn.Linear(4,1)
self.activate = torch.nn.ReLU()
def forward(self, x):
x = self.activate(self.linear1(x))
x = self.activate(self.linear2(x))
x = torch.sigmoid(self.linear3(x))
return x
model = Model()
将模型和数据加载到GPU上,代码如下:
### 将模型和训练数据加载到GPU上
# 模型加载到GPU上
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model.to(device)
# 数据加载到GPU上
x = x_data.to(device)
y = y_data.to(device)
3、构造损失函数和优化器
criterion = torch.nn.BCELoss(reduction='mean')
optimizer = torch.optim.SGD(model.parameters(),lr=0.1)
4、训练过程
epoch_list = []
loss_list = []
epochs = 10000
for epoch in range(epochs):
# Forward
y_pred = model(x)
loss = criterion(y_pred, y)
print(epoch, loss)
epoch_list.append(epoch)
loss_list.append(loss.data.item())
# Backward
optimizer.zero_grad()
loss.backward()
# Update
optimizer.step()
5、结果展示
查看各个层的权重和偏置:
model.linear1.weight,model.linear1.bias
model.linear2.weight,model.linear2.bias
model.linear3.weight,model.linear3.bias
损失值随迭代次数的变化曲线:
# 绘图展示
plt.plot(epoch_list,loss_list,'b')
plt.xlabel('epoch')
plt.ylabel('loss')
plt.grid()
plt.show()
最终的损失和准确率:
# 准确率
y_pred_label = torch.where(y_pred.data.cpu() >= 0.5,torch.tensor([1.0]),torch.tensor([0.0]))
acc = torch.eq(y_pred_label, y_data).sum().item()/y_data.size(0)
print("loss = ",loss.item(), "acc = ",acc)
loss = 0.4232381284236908 acc = 0.7931488801054019
二、参考文献
[1] https://www.bilibili.com/video/BV1Y7411d7Ys?p=7
[2] https://blog.csdn.net/bit452/article/details/109682078
来源:https://blog.csdn.net/weixin_43821559/article/details/123314829
标签:PyTorch,多维度,输入,逻辑,回归
0
投稿
猜你喜欢
JS 简单展开关闭切换代码
2024-05-05 09:14:30
Python基础教程之if判断,while循环,循环嵌套
2023-11-05 12:56:07
Jquery.TreeView结合ASP.Net和数据库生成菜单导航条
2024-01-15 01:23:44
如何在向量化NumPy数组上进行移动窗口
2023-04-23 08:26:55
简单易懂的python环境安装教程
2023-05-21 14:39:16
为你的ASP程序作一个负载测试
2008-10-23 13:48:00
ASP网页编程的19个基本技巧
2023-07-09 11:52:01
天极网页版式设计的思考
2008-01-18 12:44:00
Mysql Innodb引擎优化(参数篇)
2010-05-02 19:57:00
Python中逗号的三种作用实例分析
2021-12-24 23:52:33
MySQL使用UNIQUE实现数据不重复插入
2024-01-26 08:48:03
python实现基于两张图片生成圆角图标效果的方法
2023-04-20 17:58:56
Python面试之os.system()和os.popen()的区别详析
2023-09-14 18:15:39
解决python replace函数替换无效问题
2022-05-20 18:51:57
vue+php实现的微博留言功能示例
2023-11-18 01:47:02
python如何基于redis实现ip代理池
2022-11-05 20:49:08
Pygame实战练习之一百层游戏
2022-01-08 00:07:54
Python新手入门webpy小应用开发
2021-02-03 18:53:59
vue切换页面(路由)时如何保持滚动条回到顶部
2024-05-28 15:54:49
线上MySQL的自增id用尽怎么办
2024-01-22 01:39:38