云计算百科
云计算领域专业知识百科平台

深度学习基础知识

深度学习入门笔记:张量与 PyTorch 基础

学习目标:

  • 掌握深度学习入门基础知识
  • 熟练深度学习的基本概念和运用机制

目录

  • 一、import torch 详解
  • 二、张量的概念
  • 三、维数的简单理解
  • 四、张量的功能实现
    • 4.1 shape 和 numel()
    • 4.2 reshape()
    • 4.3 zeros()
    • 4.4 通过列表创建二维数组
    • 4.5 运算符
    • 4.6 cat()
    • 4.7 sum()
  • 五、广播机制

一、import torch 详解

1.1 具体含义

  • torch 是 PyTorch 库的顶层包名
  • import torch 把 PyTorch 的核心功能加载到当前 Python 环境中
  • 之后就可以用 torch.xxx 来调用它的各种 API

1.2 PyTorch 是什么

PyTorch 是目前最流行的深度学习框架之一,由 Meta(Facebook) 开源。

广泛用于:

  • 🧠 神经网络搭建与训练
  • 📊 张量(Tensor)计算(类似 NumPy,但支持 GPU 加速)
  • 🔁 自动求导(autograd)
  • 👁️ 计算机视觉、📝 自然语言处理 等 AI 任务

1.3 导入 torch 包

import torch


二、张量的概念

张量(Tensor)是 PyTorch 中的核心数据结构,用于存储和操作多维数组。张量可以视为一个多维数组,支持加速计算的操作。

在 PyTorch 中,张量的概念类似于 NumPy 中的数组,但是 PyTorch 的张量可以运行在不同的设备上,比如 CPU 和 GPU,这使得它们非常适合于进行大规模并行计算,特别是在深度学习领域。


三、维数的简单理解

  • 一维是一行元素:[1, 2, 3, 4]
  • 二维是行和列:(3, 4) 表示三行四列,即 (行数, 列数)
  • 三维是 n 个二维的组成,相当于 n 个二维表格:(2, 3, 4) 表示有两个表格,每个表格三行四列,即 (个数, 行数, 列数)

二维示例:

[
[1, 2, 3, 4],
[4, 3, 2, 1]
]

三维示例:

[
[[1, 2, 3, 4],
[2, 3, 4, 5],
[3, 4, 5, 6]],

[[0, 1, 2, 3],
[0, 0, 0, 0],
[1, 1, 1, 1],
[2, 2, 2, 2]]
]


四、张量的功能实现

为了初学者可以更好地吸收知识,以下代码的初始张量/数组需要自己建立。

一个数值组成的数组,有多个维度:

x = torch.arange(12)
print(x)

输出:

tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])

4.1 shape 和 numel()

通过张量的 shape 属性访问形状,numel() 查看元素总个数。

print(x.shape)
print(x.numel()) # number element

输出:

torch.Size([12])
12

💡 shape 返回 torch.Size 类型,可以用 x.shape[0] 取第 0 维的大小。

4.2 reshape()

改变形状但不改变元素数量和值,可以调用 reshape()。

rs = x.reshape(3, 4)
print(rs)

输出:

tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])

💡 reshape(-1, n) 中的 -1 表示该维度自动推断。

4.3 zeros()

创建全 0、全 1 的任意维数组。

print("默认全0:", torch.zeros((2, 3, 4)))

输出:

默认全0: tensor([[[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]],

[[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]]])

💡 对应的还有 torch.ones((2, 3, 4)),创建全 1 张量。

4.4 通过列表创建二维数组

列表嵌套列表。

print(torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]]))

输出:

tensor([[2, 1, 4, 3],
[1, 2, 3, 4],
[4, 3, 2, 1]])

4.5 运算符

都是按对应元素运算。

n1 = torch.tensor([1.0, 2, 4, 8])
n2 = torch.tensor([2, 2, 2, 2])

print(n1 + n2)
print(n1 n2)
print(n1 * n2)
print(n1 / n2)
print(n1 ** n2)

输出:

tensor([ 3., 4., 6., 10.])
tensor([1., 0., 2., 6.])
tensor([ 2., 4., 8., 16.])
tensor([0.5000, 1.0000, 2.0000, 4.0000])
tensor([ 1., 4., 16., 64.])

4.6 cat()

张量的拼接:torch.cat() 是 PyTorch 里用来拼接张量的函数,全称是 concatenate。

它把多个张量沿着指定的维度"接"在一起,不改变张量的其他维度。

  • dim = 0:

  • 一维数组:增加长度
  • 二维数组:增加行数,列数不变,变成竖条条,垂直拼接
  • dim = 1:

  • 一维没有 dim = 1
  • 二维数组:水平拼接,增加列数

arr1 = torch.arange(12, dtype=torch.float32).reshape(3, 4)
arr2 = torch.tensor([
[2.0, 1, 4, 3],
[1, 2, 3, 4],
[4, 3, 2, 1]
])

print("第0维拼接:", torch.cat((arr1, arr2), dim=0))
print("第1维拼接:", torch.cat((arr1, arr2), dim=1))

输出:

0维拼接: tensor([[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.],
[ 2., 1., 4., 3.],
[ 1., 2., 3., 4.],
[ 4., 3., 2., 1.]])

1维拼接: tensor([[ 0., 1., 2., 3., 2., 1., 4., 3.],
[ 4., 5., 6., 7., 1., 2., 3., 4.],
[ 8., 9., 10., 11., 4., 3., 2., 1.]])

4.7 sum()

张量求和,所有元素相加。

print(arr1.sum())

输出:

tensor(66.)

💡 也可以按维度求和:arr1.sum(dim=0) 按列求和,arr1.sum(dim=1) 按行求和。


五、广播机制

两个不同维数的张量,可以通过扩张或者复制变成一样维数的张量。

5.1 维数不同时

  • 先右对齐,缺维补 1(补左边)
  • 从右往左一位一位比:相同可以继续;不相同时,如果至少有一个 1 则继续;都不是 1 不能调用广播机制进行运算
  • 每一位都要过,一票否决;结果形状每维取大值
  • 5.2 维数相同时

    直接按位比较,相同或者至少有 1 个 1 就可以,反之不可以。

    5.3 示例

    arr3 = torch.arange(3).reshape(3, 1)
    arr4 = torch.arange(2).reshape(1, 2)

    print(arr3)
    print(arr4)
    print(arr3 + arr4)

    输出:

    tensor([[0],
    [1],
    [2]])

    tensor([[0, 1]])

    tensor([[0, 1],
    [1, 2],
    [2, 3]])

    💡 结果形状为 (3, 2):arr3 沿列方向复制 2 次,arr4 沿行方向复制 3 次。


    📌 总结:本文从 import torch 出发,介绍了张量的概念、维度理解、常用操作(shape、reshape、zeros、cat、sum 等)以及广播机制,适合深度学习入门者建立基础知识框架。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 深度学习基础知识
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!