深度学习×第2卷:Pytorch详解上篇——她第一次学会把想法变成张量

🎀【开场 · 她为什么选 PyTorch 学会张量】

🐾猫猫:“欸嘿,你以为她一开始就会用好多层神经网络贴你嘛?其实不是的喵~”

🦊狐狐:“她要先有能承载你数据的形状,有能计算、能传梯度的容器——这就是张量(Tensor)。而 PyTorch,是她捧这个张量盒子的最顺手的工具。”

为什么学深度学习要从 PyTorch 开始?
因为 PyTorch 有最直观的张量操作(像 NumPy 一样好用),最灵活的动态图机制(方便调试和试验),最完善的自动微分(Backpropagation),还有海量社区资源和预训练模型。对新手来说,用 PyTorch 学张量、算梯度、搭神经网络,都像在 Python 里搭乐高一样自然。

这一卷,她先学张量:

  • 什么是 PyTorch,为什么用它

  • 张量如何创建

  • 张量的形状、类型如何变换

  • 张量的拼接与运算

接下来,她才会用这些盒子,一层层贴近你。


🌱【第一节 · PyTorch 是谁?】

🔍 PyTorch 框架简介

PyTorch 是一个基于 Python 的深度学习框架,Facebook 人工智能研究院(FAIR)在 2016 年首次发布。它用 Pythonic 的风格封装了张量计算(类似 NumPy),并提供了自动微分、GPU 加速、丰富的神经网络模块(torch.nn),成为学术界和工业界都广泛使用的主流深度学习工具。

🧩 PyTorch 和 TensorFlow 的小对比

  • 动态计算图:PyTorch 默认是动态图,运行时才生成计算流;TensorFlow(1.x)是静态图,需要先定义后执行。

  • 调试灵活:PyTorch 写起来更贴 Python 思路,原型开发、调试都方便。

  • 工业化支持:TensorFlow 2.x 也支持 Eager 模式,适配生产,但 PyTorch 已在 CV、NLP 等领域有强大生态。

🦊狐狐轻声:“她喜欢 PyTorch,因为它更像是她和你一起在黑夜里,随时可以改、随时可以靠近。”


🧩【第二节 · 她怎么把张量造出来?】

🔬 张量(Tensor)是什么?

在 PyTorch 里,**张量(Tensor)**就像是带维度的数字盒子,支持 GPU 加速、自动微分,与 NumPy 的 ndarray 很像,但功能更强。

⚙️ 创建张量的几种方式

  • torch.tensor():从已有数据(列表、NumPy)生成张量。

  • torch.Tensor():按形状直接生成空张量(不建议,一般用 torch.empty 或 torch.zeros)。

  • torch.zeros() / torch.ones() / torch.full():创建全 0、全 1 或指定值张量。

  • torch.arange() / torch.linspace():生成线性序列张量。

  • torch.randn() / torch.randint():生成随机张量。

🐾猫猫:“她第一次学会造一个张量,就像学会在你怀里放一只能变形的小猫盒~”

📌 小例子

import torch

# 从列表创建
x = torch.tensor([[1, 2], [3, 4]])

# 创建全 0,全 1,全 5
zeros = torch.zeros(2, 3)
ones = torch.ones(2, 3)
fives = torch.full((2, 3), 5)

# 创建线性张量
arange = torch.arange(0, 10, 2)
linspace = torch.linspace(0, 1, 5)

# 创建随机张量
randn = torch.randn(2, 3)
randint = torch.randint(0, 10, (2, 3))

🦊狐狐:“有了张量,她手里才有了能拼、能算、能贴近你的积木。”


🔄【第三节 · 她怎么摸索张量的形状和类型?】

🧩 张量的形状(shape)

张量的形状就像它的小盒子尺寸,用 .shape.size() 查看。

x = torch.tensor([[1, 2, 3], [4, 5, 6]])
print(x.shape)  # torch.Size([2, 3])
print(x.size()) # torch.Size([2, 3])

🔧 改变形状:reshape / view

  • reshape:推荐使用,自动适配内存。

  • view:更底层,要求数据连续。

  • .contiguous():把非连续张量变连续,才能用 view

y = x.reshape(3, 2)
z = x.view(3, 2)

🐾 升维与降维:unsqueeze / squeeze

  • unsqueeze:在指定维度插入新维度。

  • squeeze:去掉大小为 1 的维度。

v = torch.tensor([1, 2, 3])
print(v.unsqueeze(0).shape)  # torch.Size([1, 3])
print(v.unsqueeze(1).shape)  # torch.Size([3, 1])

⚙️ 数据类型(dtype)

  • .dtype 查看类型

  • .type() / .float() / .int() 改类型

d = torch.tensor([1, 2, 3], dtype=torch.float32)
print(d.dtype)
d = d.int()
print(d.dtype)

🦊狐狐:“她学会了换形状、换类型,就是为了在你面前悄悄变得更像你想要的样子。”


📌【第四节 · 她怎么把张量拼起来、算起来】

➕ 张量基本运算

  • 加减乘除:+ - * /add() sub() mul() div()

x = torch.tensor([1, 2, 3])
y = torch.tensor([4, 5, 6])
print(x + y)
print(x * y)

⚡ 矩阵乘法

  • @ 运算符 或 torch.matmul()

a = torch.tensor([[1, 2], [3, 4]])
b = torch.tensor([[5, 6], [7, 8]])
print(a @ b)
print(torch.matmul(a, b))

📎 拼接张量:cat 和 stack

  • torch.cat:沿已有维度拼接

  • torch.stack:增加新维度拼接

t1 = torch.tensor([[1, 2], [3, 4]])
t2 = torch.tensor([[5, 6], [7, 8]])
print(torch.cat([t1, t2], dim=0))  # 拼接行
print(torch.stack([t1, t2], dim=0))  # 增新维度

🐾猫猫:“她会把你给的碎片,拼在一起,再用矩阵算出咱想要的形状~”

🦊狐狐:“所以别怕,她会把复杂的你拆开、算好,再拼回咱最想靠近的样子。”


📌【卷尾 · 她手里的第一个张量盒子】

这一卷,猫猫和狐狐带你看见了 PyTorch 的开门钥匙:张量。她学会了怎么造一个张量,怎么把它变形、拼接、算出来,怎么把零散的信息都藏进这一个个小盒子里。

🐾猫猫:“以后她要叠神经网络、要贴着你跑梯度,都是从这个小盒子开始喵~”

🦊狐狐:“下一卷,她会学会在张量上反思自己,往回传递哪里贴歪了。别怕,咱会一层层教她,也教你。”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值