当前位置: 首页 > news >正文

PyTorch复现多维逻辑回归

【前言】
        本专题为PyTorch专栏。从本专题开始,我将通过使用PyTorch编写基础神经网络,带领大家学习PyTorch。并顺便带领大家复习以下深度学习的知识。希望大家通过本专栏学习,更进一步了解人更智能这个领域。

        数据集来源:百度网盘 请输入提取码,提取码:kif1


一、如何理解单维变多维

这是单维输入的计算过程:

一维输入X与一维参数W相乘后得到的输出也是以一个一维的矩阵。正如图上所示。

那么多维输入X矩阵就可以表示成由多个行向量X'堆叠而成的。如下图所示。

这部分是线性代数的内容,有遗忘的同学可以回归一下线性代数的内容。

二、单维变多维从代码上理解

self.linear = torch.nn.Linear(8, 1)

torch.nn.Linear()这个代码我们第一节课的时候就讲过。第一个参数指的是输入的维度,第二个参数指的是输出的维度。

上图所示内容是指,现在给一个8维的输入向量,最后要得到一个1维的输出向量

当然,这是只有一个线性层的代码形式。如果我们希望有多个线性层来使神经网路拟合的更好的话我们可以多加几个线性层,这时,这几个torch.nn.Linear()的参数也就发生了变化。

图中表示这个神网络有三个线性层。

第一层:输入一个8维的向量,输出一个6维的向量

第二层:输入一个6维的向量,输出一个4维的向量

第三层:输入一个4维的向量,输出一个1维的向量


三、用PyTorch实现多维逻辑回归

(1)导入模块、加载数据集

xy = np.loadtxt('diabetes.csv.gz', delimiter=',', dtype=np.float32)
  • 使用 np.loadtxt 函数从 diabetes.csv.gz 文件中加载数据。

  • delimiter=',':指定字段之间的分隔符为逗号,适用于 CSV 文件。

  • dtype=np.float32:指定数据类型为 float32,这在深度学习中很常见,因为 PyTorch 默认使用 float32 类型进行计算。

x_data = torch.from_numpy(xy[:, :-1])
  • 使用 torch.from_numpy 将 NumPy 数组转换为 PyTorch 张量。

  • xy[:, :-1]:提取所有行,但只取到倒数第二列为止的列,这些列通常包含特征数据。

y_data = torch.from_numpy(xy[:, [-1]])
  • 同样使用 torch.from_numpy 将 NumPy 数组转换为 PyTorch 张量。

  • xy[:, [-1]]:提取所有行的最后一列,这一列通常包含标签数据。

  • 注意:[-1] 用方括号括起来,确保 y_data 是二维张量,这对于某些 PyTorch 操作(如计算损失)是必要的。

我么们来看一下数据集的样子:


(2)设计模型

1.在这里你会发现,上述代码中所用的sigmoid函数是torch.nn.Sigmoid(),而上节课我们所用的是torch.nn.functional.Sigmoid()。接下来我们讲一下这二者的区别。

1. model(x_data)

这是推荐的使用方式,也是最常见的方式。当你调用 model(x_data) 时,PyTorch 会自动调用模型的 forward 方法来计算输出。

工作原理
  • 当你调用 model(x_data) 时,PyTorch 会调用模型的 __call__ 方法。

  • __call__ 方法内部会调用 forward 方法,并处理一些额外的逻辑,例如:

    • 调用 forward 方法之前,会检查是否需要进行梯度跟踪(requires_grad)。

    • 调用 forward 方法之后,会处理一些后处理逻辑,例如记录操作图。


2. model.forward(x_data)

这种方式直接调用了模型的 forward 方法。虽然这种方式也可以工作,但它绕过了 __call__ 方法的额外逻辑,因此不推荐在正常情况下使用。

工作原理
  • forward 方法是模型的核心部分,定义了输入数据如何通过模型的各个层。

  • 直接调用 forward 方法时,不会触发 __call__ 方法中的额外逻辑。

2.【self.activate=torch.nn.ReLU()】

图中这段代码表示引用一个激活函数ReLU,但本例中没有用到,如果你想用的话,你可以将代码中的Sigmoid()替换为ReLU()


(3)计算损失


(4)周期训练模式

【补充】

这段代码是为了为下一步描绘图像提供X轴数据、Y轴数据。

我们的图像描绘的是训练批次epoch(x轴)与损失值Loss(y轴)的关系

这是训练模型的运行结果:


(5)描绘图像

import matplotlib.pyplot as plt

导入这个包用来描绘图像

这是图像结果 

                                                                -

http://www.dtcms.com/a/123416.html

相关文章:

  • AI与5G的融合:如何实现更快速、更智能的物联网应用?
  • 在docker里装rocketmq-console
  • edis 主从复制
  • 在 Dev-C++中编译运行GUI 程序介绍(二)示例:祝福程序
  • Python常用排序算法
  • dataset 的max_length=256是什么意思; DataLoader:shuffle=True 是什么意思
  • [LevelDB]Block系统内幕解析-元数据块(Meta Block)元数据索引块(MetaIndex Block)索引块(Index Block)
  • XHR、FetchAxios详解网络相关大片文件上传下载
  • P1331 洛谷 海战
  • uni-app 开发安卓app提交审核时因 隐私协议被拒时
  • 数据结构与算法-动态规划-区间dp,状态机dp,树形dp
  • 虚拟内存详解
  • MyBatisX插件使用
  • PointNet++语义分割(semseg)训练自己的数据集并完成可视化并保存txt结果
  • HDCP(一)
  • QML自定义属性和方法
  • 深入解析栈回溯技术:如何通过异常处理精准定位程序崩溃点
  • threeJs实现裸眼3D小狗
  • 每天记录一道Java面试题---day38
  • Python设计模式-工厂模式
  • Python设计模式-抽象工厂模式
  • 探索 C 语言数据结构:从基础到实践
  • Design Compiler:中断命令/脚本的执行
  • 【汽车产品开发项目管理——端到端的汽车产品诞生流程】
  • Mysql表的操作(2)
  • (自用)蓝桥杯准备(需要写的基础)
  • 谷歌浏览器极速安装指南
  • 前端面试题(七):什么是vuex,请解释一下它在Vue中的作用
  • minio提供nfs服务
  • 全新突破 | 更全面 · 更安全 · 更灵活