深度学习自学笔记三:向量化逻辑回归和Python中的广播

目录

一、向量化

二:向量化逻辑回归

三、Python中的广播


一、向量化

向量化(Vectorization)是一种优化技术,可以在机器学习和数值计算中加快代码的执行速度。它的核心思想是使用矩阵和向量运算,而不是显式地循环处理每个元素。

在传统的循环实现中,我们需要通过迭代逐个处理数组或矩阵中的元素。这种方式可能会导致代码运行缓慢,特别是在处理大规模数据时。而向量化技术能够将循环操作转化为对整个数组或矩阵进行并行运算,从而提高计算效率。

在Python和NumPy等科学计算库中,广泛使用向量化来进行数值计算和线性代数操作。以下是几个常见的向量化示例:

1. 广播(Broadcasting):当两个形状不同的数组进行运算时,NumPy通过自动复制元素来匹配数组形状,从而避免了显式的循环。例如,可以直接对一个数组与一个标量相加,而无需显式地遍历数组的每个元素。

2. 矩阵运算:使用向量化代码可以一次性对整个矩阵或多个矩阵进行运算,如矩阵乘法、矩阵转置、矩阵求逆等。这种方式比逐个元素进行循环运算更高效。

3. 数组函数:NumPy提供了许多针对整个数组或矩阵的函数,例如求和、均值、标准差等。这些函数能够直接对整个数组进行操作,而不需要显式地使用循环。

通过向量化技术,可以简化代码实现,并且利用底层库的优化,提高计算效率。在机器学习中,向量化通常用于加速模型的训练和推理过程,特别是在处理大规模数据时能带来明显的性能提升。因此,合理地应用向量化技术可以提高程序的执行效率和可读性。

二:向量化逻辑回归

向量化逻辑回归(Vectorized Logistic Regression)是将逻辑回归算法中的计算过程通过向量和矩阵运算进行优化,以提高代码的执行效率。

在传统的逻辑回归实现中,我们需要对每个样本逐个计算预测值和梯度,并进行循环迭代更新模型参数。而向量化技术可以将这些计算过程转化为对整个训练集的矩阵和向量操作,从而实现并行加速。

以下是向量化逻辑回归的详细说明:

1. 初始化参数:首先,我们初始化权重向量w和偏置b。

2. 计算线性输出:使用矩阵乘法运算,将输入特征矩阵X与权重向量w相乘,并加上偏置b,得到线性输出z。其中,X的形状为(m, n),m为样本数量,n为特征数量。

z = X * w + b

3. 计算sigmoid函数:应用sigmoid函数,将线性输出z映射到0和1之间的概率值,表示为属于正类的概率。

y_hat = 1 / (1 + exp(-z))

4. 计算损失函数:使用交叉熵损失函数,衡量预测结果与真实标签之间的差异。

loss = - (1/m) * (y * log(y_hat) + (1-y) * log(1-y_hat))

其中,y是真实标签向量,y_hat是预测概率向量。

5. 计算梯度:通过对损失函数求导,计算权重向量w和偏置b的梯度。

dw = (1/m) * X.T * (y_hat - y)

db = (1/m) * sum(y_hat - y)

其中,X.T表示X的转置,sum表示求和。

6. 更新参数:使用学习率(learning rate)将梯度乘以负一,并加到原来的参数上,更新权重向量w和偏置b。

w = w - learning_rate * dw

b = b - learning_rate * db

7. 重复步骤2到步骤6,多次迭代更新参数,直到达到停止条件(如达到最大迭代次数或损失函数变化小于阈值)。

三、Python中的广播

在Python的NumPy库中,广播(Broadcasting)是一种强大的机制,用于处理不同形状的数组之间的运算。它允许在不显示复制数据的情况下,对具有不同形状的数组进行元素级别的操作。

广播的原理是通过自动复制数组的值来匹配形状,使得两个数组具有兼容的形状,从而可以进行相应的运算。这样,我们可以避免显式地编写循环来处理每个元素,而是直接对整个数组进行运算,提高了代码的效率和可读性。

以下是一些常见的广播操作示例:

1. 标量和数组的广播:可以将一个标量(单个值)与一个数组相加、相乘等。在广播过程中,标量会被自动扩展成与数组形状相同,并且复制到每个对应位置上。

import numpy as npa = np.array([1, 2, 3])b = 2c = a + b # [3, 4, 5]

2. 行向量和列向量的广播:可以对形状不同的行向量和列向量进行运算。在广播过程中,行向量会被自动复制为多行,列向量会被自动复制为多列,以匹配另一个操作数的形状。

import numpy as npa = np.array([[1, 2, 3]]) # 行向量b = np.array([[4], [5], [6]]) # 列向量c = a + b[[5, 6, 7],[6, 7, 8],[7, 8, 9]

3. 形状不同的数组广播:可以对具有不同形状的数组进行元素级别的运算。在广播过程中,NumPy会自动复制或调整数组的形状,使得它们的形状兼容。

import numpy as npa = np.array([[1, 2, 3]]) # 形状为(1, 3)的数组b = np.array([4, 5, 6]) # 形状为(3,)的数组c = a + b[[5, 7, 9]]

需要注意的是,在广播操作中,数组的形状必须满足一定的条件才能进行广播。通常,广播操作要求两个数组的维度相等或其中一个数组的维度为1。如果无法满足这些条件,将会引发广播错误。

广播机制在编写简洁高效的代码时非常有用,能够避免显式地编写循环,提高代码的可读性和执行效率。在进行数组运算时,要充分利用广播特性,以更方便地处理不同形状的数组。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/85407.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring的RestTemplate学习

Spring提供了一个RestTemplate模板工具类,对基于Http的客户端进行了封装,并且实现了对象与json的序列化和反序列化,非常方便。RestTemplate并没有限定Http的客户端类型,而是进行了抽象,目前常用的3种都有支持&#xff…

数据结构与算法(六)--链表的遍历,查询和修改,删除操作

一、前言 上篇文章我们了解了链表的概念以及链表底层的搭建以及向链表中添加元素的操作。本次我们继续学习链表剩余的操作:遍历,查询和修改、删除操作。 二、链表查询以及遍历 ①获得链表的第index(0-based)个位置的元素(不常用&#xff0…

1447: PIPI的线性表问题Ⅰ

题目描述 已知线性表中的元素以递增序列排列,并以单链表作存储结构。设计算法删除表中所有值相同的多余元素(使得操作后的线性表中所有的值均不相同),同时释放被删结点空间,并分析算法的时间复杂度。 输入 第一行输…

云计算介绍

1.1 SaaS SaaS 是 Software-as-a-Service(软件即服务)1.2 PaaS PaaS 是 Platform-as-a-Service 的缩写,意思是平台即服务。 把服务器平台作为一种服务提供的 商业模式。通过网络进行程序提供的服务称之为 SaaS(Software as a Serv…

2023年海南省职业院校技能大赛(高职组)“软件测试”赛项竞赛规程

2023年海南省职业院校技能大赛(高职组) “软件测试”赛项竞赛规程 一、赛项名称 赛项名称:软件测试 英文名称:Software Testing 赛项组别:高职组 赛项归属产业:电子信息大类 二、竞赛目标 &#xf…

MySQL详细案例 1:MySQL主从复制与读写分离

文章目录 1. MySQL主从复制1.1 使用场景1.2 MySQL的复制类型1.3 主从复制的作用1.4 主从复制的工作过程1.5 实现MySQL主从复制1.5.1 前置准备1.5.2 主服务器mysql配置1.5.3 从服务器1 mysql配置1.5.4 从服务器2 mysql配置1.5.5 测试 1.6 主从复制的3种同步模式1.6.1 异步复制&a…

微信小程序底部安全区域高度获取

CSS 属性 safe-area-inset-bottom safe-area-inset-bottom 就是安全区的高度 padding-bottom:env(safe-area-inset-bottom); wx.getSystemInfoSync() wx.getSystemInfoSync()可以获取系统信息 let system wx.getSystemInfoSync() let bottomSafe system.screenHeight -…

一招解除csdn复制限制

先看这个代码 python读取英文pdf翻译成中文pdf文件导出代码 想要复制代码,csdn有限制怎么办(csdn流氓,无耻) 解除方法 ctrlu 看效果

Linux启动过程详解 Xmind导图笔记

参考大佬博客: 简要描述linux系统从开机到登陆界面的启动过程 Linux启动过程详解 Bootloader详解 来源:从BIOS开始画图了解Linux启动过程——老杨Linux

OpenCV自学笔记二十六:人脸检测

目录 一、人脸检测 二、LBPH人脸识别 三、EigenFaces人脸识别 四、Fisherfaces人脸识别 一、人脸检测 在OpenCV中,人脸检测是一个常见的计算机视觉任务,可以通过Haar级联分类器来实现。Haar级联分类器是一种基于机器学习的目标检测方法,…

TSINGSEE视频AI智能分析技术:水泥厂安全生产智能监管解决方案

一、方案背景 随着人工智能技术的快速发展以及视频监控系统在全国范围内的迅速推进,基于AI视频智能分析技术的智能视频监控与智慧监管系统,也已经成为当前行业的发展趋势。在工业制造与工业生产领域,工厂对设备的巡检管理、维护维修、资产管…

【全志V3s】SPI NAND Flash 驱动开发

文章目录 一、硬件介绍V3s的启动顺序 二、驱动支持U-Boot驱动主线 Linux 驱动已经支持 三、烧录工具 xfel四、构建U-Boot(官方的Uboot)先编译一下开始spi nand flash 代码层面的适配修改menuconfig配置ARM architecture配置Support for SPI Nand Flash o…

前端大批量并发请求的处理

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>测试大批量并发异步请求</title> </…

关于线程池

线程池是一种多线程处理方式&#xff0c;通过将任务添加到队列中&#xff0c;在创建线程后自动启动这些任务。线程池中的线程可以复用&#xff0c;可以控制最大并发数&#xff0c;并且方便管理&#xff0c;也就是说&#xff0c;线程池会提前创建好一些线程&#xff0c;当后续需…

rabbitMQ (1)

文章目录 1. RabbitMQ 介绍1.1 几个重要概念1.2 RabbitMq 的工作原理 2 RabbitMQ 安装3. RabbitMQ 入门操作3.1 添加依赖3.2 生产者代码3.3 消费者代码 4. Work Queues5. 管理端页面创建队列 1. RabbitMQ 介绍 引用 &#xff1a; RabbitMQ 是一个消息中间件&#xff1a;它接受…

Xilinx FPGA 程序固化重新上电程序不运行的问题

问题描述 FPGA直接下载bit文件,功能正常。 FPGA擦除FLASH,烧写FLASH,正常。 电源断电,重新上电,FALSH里面的程序没有启动,FPGA程序没有跑起来。–FLASH启动不正常。 解决办法 在XDC约束文件里边增加约束: ## Configuration options, can be used for all designs se…

JsonPath详解

JsonPath 简介 JsonPath是一种信息抽取类库&#xff0c;是从JSON文档中抽取指定信息的工具文档 http://goessner.net/articles/JsonPath 安装 pip install jsonpath 使用 注意&#xff1a;这里的json_data为python数据&#xff0c;如列表&#xff0c;字典 data jsonpath.…

[Linux入门]---Linux项目自动化构建工具-make/Makefile

目录 1.背景2.make指令输入make默认为Makefile文件第一条指令执行Makefile文件对gcc指令特殊处理及原理特殊符号 3.总结 1.背景 会不会写makefile&#xff0c;从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放…

CNN(九):Inception v3算法实战

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客 &#x1f356; 原作者&#xff1a;K同学啊|接辅导、项目定制 1 理论基础 Inception v3论文 Inception v3由谷歌研究员Christian Szegedy等人在2015年的论文《Rethinking the Inception Architecture f…

Jmeter集成到jenkins

Jmeter集成到Jenkins Jmeter集成到Jenkins. 1 软件下载... 4 一:环境配置... 4 1.JDK安装&#xff1a;... 4 配置JDK环境变量... 5 2.Jmeter安装&#xff1a;... 5 配置jmeter环境变量... 6 3.安装Ant 7 配置Ant环境变量... 7 4.Git安装&#xff1a;... 8 配置git环境…