首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
01 | PyTorch:网红中的顶流明星
02 | NumPy(上):核心数据结构详解
03 | NumPy(下):深度学习中的常用操作
04 | Tensor:PyTorch中最基础的计算单元
05 | Tensor变形记:快速掌握Tensor切分、变形等方法
06 | Torchvision(上):数据读取,训练开始的第一步
07 | Torchvision(中):数据增强,让数据更加多样性
08 | Torchvision(下):其他有趣的功能
09 | 卷积(上):如何用卷积为计算机“开天眼”?
10 | 卷积(下):如何用卷积为计算机“开天眼”?
11 | 损失函数:如何帮助模型学会“自省”?
12 | 计算梯度:网络的前向与反向传播
13 | 优化方法:更新模型参数的方法
14 | 构建网络:一站式实现模型搭建与训练
15 | 可视化工具:如何实现训练的可视化监控?
16|分布式训练:如何加速你的模型训练?
17 | 图像分类(上):图像分类原理与图像分类模型
18 | 图像分类(下):如何构建一个图像分类模型?
19 | 图像分割(上):详解图像分割原理与图像分割模型
20 | 图像分割(下):如何构建一个图像分割模型?
21 | NLP基础(上):详解自然语言处理原理与常用算法
22 | NLP基础(下):详解语言模型与注意力机制
23 | 情感分析:如何使用LSTM进行情感分析?
24 | 文本分类:如何使用BERT构建文本分类模型?
25 | 摘要:如何快速实现自动文摘生成?
当前位置:
首页>>
技术小册>>
PyTorch深度学习实战
小册名称:PyTorch深度学习实战
### 03 | NumPy(下):深度学习中的常用操作 在深度学习的广阔天地里,NumPy作为科学计算的基础库,其重要性不言而喻。它不仅提供了高效的多维数组对象,还实现了大量用于数组操作的函数,这些特性使得NumPy成为构建深度学习模型时不可或缺的工具。在前一章节中,我们初步探索了NumPy的基本概念、数组创建、索引与切片等基础操作。本章节,我们将深入NumPy在深度学习中的常用操作,涵盖数组的数学运算、线性代数、广播机制、以及优化数据处理效率的高级技巧,为后续的PyTorch实战打下坚实的基础。 #### 一、数组的数学运算 在深度学习中,数据的数学处理是核心环节之一。NumPy提供了丰富的数学运算函数,支持元素级(element-wise)和聚合级(aggregate)的运算,极大地简化了数据处理流程。 ##### 1. 元素级运算 元素级运算指的是对数组中每个元素逐一执行相同的数学操作。NumPy通过简单的运算符重载实现了这一功能,如加法(`+`)、减法(`-`)、乘法(`*`)、除法(`/`)等。此外,NumPy还提供了`numpy.add()`, `numpy.subtract()`, `numpy.multiply()`, `numpy.divide()`等函数进行相同的操作,增加了代码的可读性和灵活性。 ```python import numpy as np a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) # 元素级加法 c = a + b # 或 np.add(a, b) print(c) # 输出: [5 7 9] # 元素级乘法 d = a * b # 或 np.multiply(a, b) print(d) # 输出: [ 4 10 18] ``` ##### 2. 聚合运算 聚合运算则是对数组中的元素进行汇总计算,如求和(`np.sum()`)、平均值(`np.mean()`)、最大值(`np.max()`)、最小值(`np.min()`)等。这些操作对于理解数据的整体特性至关重要。 ```python arr = np.array([[1, 2, 3], [4, 5, 6]]) # 求和 print(np.sum(arr)) # 输出整个数组的元素和: 21 print(np.sum(arr, axis=0)) # 按列求和: [5 7 9] print(np.sum(arr, axis=1)) # 按行求和: [ 6 15] # 平均值 print(np.mean(arr)) # 输出整个数组的平均值 print(np.mean(arr, axis=0)) # 按列求平均值 ``` #### 二、线性代数 线性代数是深度学习的数学基础,NumPy提供了强大的线性代数工具集,包括矩阵乘法、行列式计算、逆矩阵求解等。 ##### 1. 矩阵乘法 矩阵乘法是深度学习中最常见的操作之一,用于实现神经网络层之间的连接。NumPy通过`numpy.dot()`函数或`@`运算符实现矩阵乘法。 ```python A = np.array([[1, 2], [3, 4]]) B = np.array([[5, 6], [7, 8]]) # 使用numpy.dot() C = np.dot(A, B) print(C) # 使用@运算符(Python 3.5+) D = A @ B print(D) # 两者输出相同 ``` ##### 2. 逆矩阵与行列式 在某些情况下,我们需要计算矩阵的逆或行列式。NumPy通过`numpy.linalg.inv()`和`numpy.linalg.det()`函数提供了这些功能。 ```python E = np.array([[1, 2], [-1, 0]]) # 计算逆矩阵 inv_E = np.linalg.inv(E) print(inv_E) # 计算行列式 det_E = np.linalg.det(E) print(det_E) ``` #### 三、广播机制 NumPy的广播(Broadcasting)机制是其强大之处之一,它允许NumPy在执行算术运算时自动扩展数组的维度,以匹配另一个数组的维度,从而无需显式地创建新的数组或进行维度转换。 ```python x = np.array([1, 2, 3]) y = np.array([4]) # 广播机制使得y的形状扩展为(3,),与x匹配 z = x + y # 等价于 [1+4, 2+4, 3+4] print(z) # 输出: [5 6 7] ``` 理解广播机制对于高效利用NumPy进行数据处理至关重要。 #### 四、优化数据处理效率 在深度学习中,处理的数据量往往非常庞大,因此优化数据处理效率显得尤为重要。NumPy通过内部优化的C语言实现,以及高效的内存管理机制,已经为我们提供了很高的性能。但在此基础上,我们还可以通过一些技巧进一步提升效率。 ##### 1. 避免使用循环 NumPy的设计初衷之一就是减少循环的使用,因为循环在Python中通常较慢。尽量利用NumPy的向量化操作来替代循环,可以显著提升性能。 ##### 2. 合理使用内存视图 NumPy允许我们通过切片或索引操作创建数组的视图(view)而不是副本(copy),这样可以节省内存并可能提高性能。但是,需要注意的是,对视图进行修改可能会影响到原数组。 ##### 3. 预先分配空间 在进行大规模数据处理时,如果知道最终数据的大小,可以提前分配好足够的空间,以避免在过程中频繁地进行内存分配和释放,这有助于提高性能。 ##### 4. 利用并行计算 虽然NumPy本身并不直接支持并行计算,但它是许多并行计算库(如Dask、CuPy等)的基础。这些库可以在多核CPU或GPU上并行执行NumPy操作,从而进一步提升性能。 #### 结语 通过本章节的学习,我们深入了解了NumPy在深度学习中的常用操作,包括数组的数学运算、线性代数、广播机制以及优化数据处理效率的高级技巧。这些技能不仅是进行深度学习研究的基础,也是编写高效、可维护代码的关键。在接下来的章节中,我们将基于这些基础,进一步探索PyTorch这一深度学习框架的强大功能。
上一篇:
02 | NumPy(上):核心数据结构详解
下一篇:
04 | Tensor:PyTorch中最基础的计算单元
该分类下的相关小册推荐:
人工智能超入门丛书--数据科学
ChatGLM3大模型本地化部署、应用开发与微调(中)
巧用ChatGPT轻松学演讲(中)
AI时代产品经理:ChatGPT与产品经理(上)
人工智能技术基础(上)
人工智能超入门丛书--知识工程
AI时代架构师:ChatGPT与架构师(下)
ChatGPT大模型:技术场景与商业应用(上)
python与ChatGPT让excel高效办公(上)
巧用ChatGPT轻松学演讲(下)
人工智能技术基础(下)
ChatGPT商业变现