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

向量化编程

向量化编程

前言

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

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

1、向量化编程

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

2、向量化优势

由于在进行计算的时候,最好不要使用 for 循环去进行计算,使用 Numpy 可以进行更加快速的向量化计算。

例如:

  • 使用 for 循环

    python 复制代码
    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

    python 复制代码
    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、正向传播和反向传播

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

相关推荐
数据智能老司机1 小时前
构建具备自主性的人工智能系统——探索协调者、工作者和委托者方法
深度学习·llm·aigc
数据智能老司机1 小时前
构建具备自主性的人工智能系统——使代理能够使用工具和进行规划
深度学习·llm·aigc
2301_769624401 小时前
基于Pytorch的深度学习-第二章
人工智能·pytorch·深度学习
-一杯为品-2 小时前
【深度学习】#9 现代循环神经网络
人工智能·rnn·深度学习
硅谷秋水2 小时前
ORION:通过视觉-语言指令动作生成的一个整体端到端自动驾驶框架
人工智能·深度学习·机器学习·计算机视觉·语言模型·自动驾驶
亿牛云爬虫专家3 小时前
深度学习在DOM解析中的应用:自动识别页面关键内容区块
深度学习·爬虫代理·dom·性能·代理ip·内容区块·东方财富吧
豆芽8193 小时前
强化学习(Reinforcement Learning, RL)和深度学习(Deep Learning, DL)
人工智能·深度学习·机器学习·强化学习
别摸我的婴儿肥3 小时前
从0开始LLM-注意力机制-2
深度学习
nenchoumi31194 小时前
VLA 论文精读(十八)π0.5: a Vision-Language-Action Model with Open-World Generalization
论文阅读·人工智能·深度学习·语言模型·vla
nndeploy5 小时前
nndeploy开源推理框架教程来袭,模型推理全流程,轻松上手,一键精通!
深度学习