# 动手深度学习-Pytorch版

# 前言

中文文档地址 (opens new window),可下载代码

# 预备知识

# Jupyter Notebook

Jupyter Notebook是一款开源的交互式计算工具,主要用于创建包含实时代码、富文本、数学公式、图表、可视化等内容的文档(文件扩展名为 .ipynb

使用方法:

  1. 下载安装
pip3 install notebook
  1. 进入ipynb资源目录,运行notebook
jupyter notebook
  1. 打开浏览器,http://localhost:8888/tree

image-20251114110007305

image-20251114110103005

# 如何在conda环境运行jupyter呢?

  1. base 环境安装jupyter
activate base
conda install jupyter jupyterlab
  1. 在目标环境安装内核
conda activate myproject
conda install ipykernel # 安装内核
python -m ipykernel install --user --name myproject --display-name "Python (myproject)"  # 注册为jupyter 可选kernel
  1. 在base环境运行
jupyter lab  # 功能更丰富的网页端
# 或者
jupyter notebook

image-20251115215653418

# 数据操作

  1. torch基础操作
x = torch.arange(12)  # 创建张量
x.shape # 查看张量形状
x.numel() # 查看元素数量
    
X = x.reshape(3,4) # 改变张量形状
torch.zeros((2,3,4)) # 用0初始化
torch.ones((2,3,4)) # 用1初始化
torch.randn(3,4) # 用随机数初始化
torch.tensor([[2,1,4,3],[1,2,3,4],[4,3,2,1]])  # 用嵌套列表初始化
  1. 运算符

常见的标准运算符(+、-、*、/、**)可以升级为按元素运算,

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) # 包括计算指数


X==Y # 通过逻辑运算符构建张量
X.sum() # 对张量所有元素进行求和

张量连接

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)  # 沿列的方向拼接
  1. 广播机制
a = torch.arange(3).reshape(3,1) # a为3行1列
b = torch.arange(2).reshape(1,2) # b为1行2列
a + b # a复制列,b复制行,然后按元素相加
  1. 索引和切片
X[-1],X[1:3]  # 最后一个元素, 第二个元素和第三个元素

X[1:2] = 9 # 指定索引来写入矩阵

X[0:2, :] = 12 # 第一行、第二行赋值为12  :表示沿轴1的所有元素
  1. 节省内存
before = id(Y)  # id()获取内存中对象的地址
Y = Y + X  # Y 内存引用地址已经变化
id(Y) == before  

原地操作

>>> Z = torch.zeros_like(Y)
>>> id(Z)
2337955335120
>>>
>>> Z[:] = X + Y
>>> id(Z)
2337955335120

>>> before = id(X)
>>> X += Y
>>> id(X) == before
True
  1. 转换为其他python对象

torch与numpy数组共享底层内存

>>> A = X.numpy()
>>> B = torch.tensor(A)
>>> type(A),type(B)
(<class 'numpy.ndarray'>, <class 'torch.Tensor'>)

大小为1的张量与Python标量转换

>>> a = torch.tensor([3.5])
>>> a,a.item(),float(a),int(a)
(tensor([3.5000]), 3.5, 3.5, 3)

# 线性代数

  1. 标量
import torch

x = torch.tensor(3.0)
y = torch.tensor(2.0)

x + y, x * y, x / y, x**y
  1. 向量
x = torch.arange(4)
  1. 矩阵
A = torch.arange(20).reshape(5, 4)
A.T
  1. 张量
X = torch.arange(24).reshape(2, 3, 4)

# 概率论

image-20251117001721718

image-20251117002025813

image-20251117002244568

看到103页了

Last Updated: 11/16/2025, 4:35:43 PM