【深度学习神经网络学习笔记(三)】向量化编程

news/2025/2/26 23:52:00

向量化编程

    • 向量化编程
    • 前言
    • 1、向量化编程
    • 2、向量化优势
    • 3、正向传播和反向传播

向量化编程

前言

向量化编程是一种利用专门的指令集或并行算法来提高数据处理效率的技术,尤其在科学计算、数据分析和机器学习领域中非常常见。它允许通过一次操作处理整个数组或矩阵的数据,而不是通过循环逐个处理每个元素。这种方法不仅简化了代码,而且能够显著提高程序运行速度,因为它更有效地利用了现代 CPU 的并行计算能力。

备注:本系列文章基于B站课程: 122集付费!CNN、RNN、GAN、GNN、DQN、Transformer、LSTM等八大深度学习神经网络一口气全部学完!学习整理得到。

1、向量化编程

没更新一次梯度时候,在训练期间我们会拥有 m 个样本,那么这样每个样本提供进去都可以做一个梯度计算。所以我们要去做所有样本上的计算结果、梯度等操作。
在这里插入图片描述

2、向量化优势

由于在进行计算的时候,最好不要使用 for 循环去进行计算,使用 Numpy 可以进行更加快速的向量化计算。
在这里插入图片描述
例如:

  • 使用 for 循环

    import numpy as np
    import time
    
    a = np.random.rand(100000)
    b = np.random.rand(100000)
    # 第一种 for 循环
    c = 0
    start = time.time()
    for i in range(100000):
        c += a[i] * b[i]
    end = time.time()
    print(c)
    print("计算耗时:%s" % str((end - start) * 1000) + 'ms')
    
    
  • 使用 np.dot

    import numpy as np
    import time
    
    a = np.random.rand(100000)
    b = np.random.rand(100000)
    d = a * b
    # 向量化运算 np.dot()
    start1 = time.time()
    c1 = np.dot(a, b)
    end1 = time.time()
    print(c1)
    print("计算耗时:%s" % str((end1 - start1) * 1000) + 'ms')
    

运行结果如下:
在这里插入图片描述
可以看到 Numpy 能够充分的利用并行化。

Numpy 中提供了很多函数使用

函数作用
np.ones or np,zeros全为1或者0的矩阵
np.exp指数计算
np.log对数计算
np.abs绝对值计算

所以上述的 m 个样本的梯度更新过程,就是去除掉 for 循环

3、正向传播和反向传播

前面我们所做的整个过程分为两个部分,一个是从前往后的计算出梯度和损失,另一部分是从后往前计算参数的更新梯度值。所以在神经网络中经常会出现这两个概念。


http://www.niftyadmin.cn/n/5869283.html

相关文章

支持 40+ 插件,Spring AI Alibaba 简化智能体私有数据集成

作者:张震霆 & 何裕墙,Spring AI Alibaba Contributor 在 AI 智能体(AI Agent)开发的过程中,RAG(Retrieval-Augmented Generation) 和 Tool Calling 已经成为两种至关重要的模式。RAG 通过…

力扣 3248. 矩阵中的蛇(Java实现)

题目分析 给定一个值n,既是矩阵边长还是操作次数。蛇可以进行上下左右操作,问操作完毕后的位置 思路分析 首先设置初始位置0,当读取操作时进行对应的操作。由示例可以看出,UP操作就是i-n;RIGHT操作就是i1;DOWN操作就是in;LEFT操作…

鸿蒙Next-方法装饰器以及防抖方法注解实现

以下是关于 鸿蒙Next(HarmonyOS NEXT)中 MethodDecorator 的详细介绍及使用指南,结合了多个技术来源的实践总结: 一、MethodDecorator 的概念与作用 MethodDecorator 是鸿蒙Next框架中用于装饰类方法的装饰器,属于 Ark…

六、 Spring Framework基础:MyBatis基本用法与实践

深入解析 Spring Data MyBatis:基本用法与实践 MyBatis 是一个流行的 Java 持久层框架,它通过 SQL 映射和动态 SQL 提供了灵活的数据库操作能力。在 Spring Boot 项目中,MyBatis 可以与 Spring Data 无缝集成,从而实现高效的数据…

本地大模型编程实战(22)用langchain实现基于SQL数据构建问答系统(1)

使 LLM(大语言模型) 系统能够查询结构化数据与非结构化文本数据在性质上可能不同。后者通常生成可在向量数据库中搜索的文本,而结构化数据的方法通常是让 LLM 编写和执行 DSL(例如 SQL)中的查询。 我们将演练在使用基于 langchain 链 &#x…

C++ 正则表达式分组捕获入门指南

在 C 中,正则表达式(regex)是一种用于匹配字符串模式的强大工具。正则表达式不仅能帮助你查找符合特定模式的字符,还能捕获匹配的子字符串(即分组捕获)。这篇文章将介绍 C 正则表达式中的分组捕获机制&…

一文2500字从0到1实现压测自动化!

大家好,我是小码哥,最近工作有点忙,一直在实现压测自动化的功能,今天来分享一下实现思路 我所在的业务线现在项目比较少了,所以最近一个月我都没有做业务测试,需求开发完后RD直接走免测就上线,…

腾讯SQL面试题变体实现:最长连续天数与允许1天中断的进阶解法

腾讯SQL面试题变体实现:最长连续天数与允许1天中断的进阶解法 作者:某七年数据开发工程师 | 2025年02月23日 关键词:滑动窗口、容错机制、连续区间优化 一、变体题型需求分析 在原题如何找出连续5天涨幅超过5%的股票基础上,需实现两个扩展场景: 最长连续天数:输出每只股…