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

昇腾AI自学Day1-- 深度学习基础工具与数学

深度学习实践基础篇

PyTorch 基本操作:张量(Tensor)基础与操作


一、前言

        在深度学习的世界中,数据的表示方式和操作效率直接影响模型的训练速度和效果。无论是图片、文本,还是表格数据,在进入神经网络之前都需要转化为模型能够理解的格式。张量(Tensor)就是这种核心数据结构。

        在 PyTorch 中,张量不仅是存储数据的容器,更是 GPU 加速计算的载体。掌握张量的创建、操作与转换,是进入 PyTorch 深度学习实践的第一步。本篇文章将带你系统了解 PyTorch 中张量的基础概念与常用操作,为后续构建和训练深度学习模型打下坚实基础。


二、主要内容介绍

本文将围绕以下几个核心主题展开:

  1. 张量的基本概念 — 理解张量与数组、矩阵的关系。

  2. 张量的创建与初始化 — 介绍常用张量创建方法及其参数。

  3. 张量的基本操作 — 包括索引、切片、维度变换、拼接与拆分。

  4. 张量与 NumPy 的互操作性 — 在 PyTorch 与 NumPy 之间高效转换数据。

  5. 张量的计算与 GPU 加速 — 利用 CUDA 提升运算速度。


三、主要内容分节介绍

1. 张量的基本概念

  • 定义

    张量(Tensor)是一个多维数组,可以看作是标量(0维)、向量(1维)、矩阵(2维)向高维推广的数学概念。

  • 与 NumPy 的区别

    在PyTorch和TensorFlow中为Tensor)都与Numpy的ndarray类似,但最大的不同是张量可以在 GPU 上进行计算,其次,张量类支持自动微分。 这些功能使得张量类更适合深度学习。极大提升了深度学习模型的训练速度。

  • 张量的属性

    • shape(形状)

    • dtype(数据类型)

    • device(设备位置:CPU 或 GPU)


2. 张量的创建与初始化

常用创建方法:

import torch# 直接创建
x = torch.tensor([1, 2, 3], dtype=torch.float32)# 全零 / 全一
zeros = torch.zeros((2, 3))
ones = torch.ones((2, 3))# 随机初始化
rand = torch.rand((2, 3))  # 均匀分布
randn = torch.randn((2, 3)) # 正态分布# 指定范围
arange = torch.arange(0, 10, 2)  # [0, 2, 4, 6, 8]
linspace = torch.linspace(0, 1, steps=5)  # 等间隔# 与已有张量形状相同
like = torch.zeros_like(rand)

3. 张量的基本操作

(1) 索引与切片

x = torch.arange(12).reshape(3, 4)
print(x[0, 1])      # 单个元素
print(x[:, 1])      # 某列
print(x[1, :])      # 某行
print(x[::2, ::2])  # 步长切片
(2) 维度变换
x = torch.arange(6).reshape(2, 3)
print(x.T)          # 转置
print(x.view(3, 2)) # 改变形状(不复制数据)
print(x.reshape(3, 2)) # 改变形状(可能复制)
(3) 拼接与拆分
a = torch.ones((2, 2))
b = torch.zeros((2, 2))
print(torch.cat([a, b], dim=0)) # 按行拼接
print(torch.cat([a, b], dim=1)) # 按列拼接split = torch.chunk(a, chunks=2, dim=0) # 按行拆分成2份

4、tensor的运算符

        我们的兴趣不仅限于读取数据和写入数据。 我们想在这些数据上执行数学运算,其中最简单且最有用的操作是按元素(elementwise)运算。 它们将标准标量运算符应用于数组的每个元素。 对于将两个数组作为输入的函数,按元素运算将二元运算符应用于两个数组中的每对位置对应的元素。 我们可以基于任何从标量到标量的函数来创建按元素函数。

        对于任意具有相同形状的张量, 常见的标准算术运算符(+-*/)都可以被升级为按元素运算。 我们可以在同一形状的任意两个张量上调用按元素操作。 在下面的例子中,我们使用逗号来表示一个具有5个元素的元组,其中每个元素都是按元素操作的结果。

x = torch.tensor([1.0, 2, 4, 8])
y = torch.tensor([2, 2, 2, 2])
x + y, x - y, x * y, x / y, x ** y  # **运算符是求幂运算
torch.exp(x)

        我们也可以把多个张量连结(concatenate)在一起, 把它们端对端地叠起来形成一个更大的张量。 我们只需要提供张量列表,并给出沿哪个轴连结。 下面的例子分别演示了当我们沿行(轴-0,形状的第一个元素) 和按列(轴-1,形状的第二个元素)连结两个矩阵时,会发生什么情况。 我们可以看到,第一个输出张量的轴-0长度(6)是两个输入张量轴-0长度的总和(3+3); 第二个输出张量的轴-1长度(8)是两个输入张量轴-1长度的总和(4+4)。

X = torch.arange(12, dtype=torch.float32).reshape((3,4))
Y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
torch.cat((X, Y), dim=0), torch.cat((X, Y), dim=1)

5. 张量与 NumPy 的互操作性

  • PyTorch → NumPy

x = torch.ones(5)
np_array = x.numpy()
  • NumPy → PyTorch

import numpy as np
n = np.ones(5)
t = torch.from_numpy(n)

注意:共享内存,修改其中一个会影响另一个。


6. 张量的计算与 GPU 加速

  • 基本运算

a = torch.tensor([1, 2, 3], dtype=torch.float32)
b = torch.tensor([4, 5, 6], dtype=torch.float32)print(a + b)         # 加法
print(a * b)         # 乘法
print(torch.dot(a, b)) # 点积
print(torch.matmul(a.view(1, 3), b.view(3, 1))) # 矩阵乘法
  • 移动到 GPU

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
x = torch.rand((1000, 1000), device=device)
y = torch.rand((1000, 1000), device=device)
z = torch.matmul(x, y) # GPU 加速计算

四、总结

        张量(Tensor)是 PyTorch 中的核心数据结构,掌握张量的创建、操作与转换,是进行深度学习实践的第一步。本篇我们从张量的概念出发,介绍了张量的初始化方法、基本操作、与 NumPy 的互操作性以及 GPU 加速的用法。

下一步,你可以尝试用这些张量操作去构建简单的神经网络结构,例如多层感知机(MLP),逐步将张量操作与深度学习模型训练结合起来,这将为你后续深入 PyTorch 提供坚实基础。


http://www.lryc.cn/news/622328.html

相关文章:

  • C语言基础08——文件的输入与输出
  • git clone https://gh.llkk.cc/
  • 什么才是真正的白盒测试?
  • 高并发接口性能优化实战:从200ms到20ms的蜕变之路
  • Python正则表达式处理Unicode字符完全指南:从基础到高级实战
  • Python工具箱系列(六十四)
  • Java Lambda表达式是什么,怎么用
  • JavaWeb开发_Day12
  • 研学智得AI-知网推出的AI学术文献阅读工具
  • OpenCV---morphologyEx形态学操作
  • Java中MybatisPlus使用多线程多数据源失效
  • Vue 侦听器(watch 与 watchEffect)全解析3
  • 如何在 FastAPI 中玩转 APScheduler,让任务定时自动执行?
  • 快速了解PCA降维
  • 《Python列表和元组:从入门到花式操作指南》
  • 接口自动化测试步骤
  • Stability AI技术浅析(二):LDM
  • productionSourceMap:true -> 编译的时候不是那么乱码了
  • 详解 k 近邻(KNN)算法:原理、实践与调优 —— 以鸢尾花分类为例
  • C++面试——内存
  • docker重启或系统重启后harbor自动启动
  • MySQL快速恢复数据的N种方案完全教程
  • 口播数字人免费API调用方案
  • MC0439符号统计
  • 【学习笔记】NTP服务客户端配置
  • 9.对象介绍
  • 2025年COR SCI2区,泊位分配、岸桥分配与引航调度的集成规划,深度解析+性能实测
  • 下载及交叉编译zlib库,记录
  • 解决 MySQL 查询速度缓慢的问题
  • 力扣400:第N位数字