# 动手深度学习-Pytorch版
# 前言
中文文档地址 (opens new window),可下载代码
# 预备知识
# Jupyter Notebook
Jupyter Notebook是一款开源的交互式计算工具,主要用于创建包含实时代码、富文本、数学公式、图表、可视化等内容的文档(文件扩展名为 .ipynb)
使用方法:
- 下载安装
pip3 install notebook
- 进入ipynb资源目录,运行notebook
jupyter notebook
- 打开浏览器,http://localhost:8888/tree


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

# 数据操作
- 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]]) # 用嵌套列表初始化
- 运算符
常见的标准运算符(+、-、*、/、**)可以升级为按元素运算,
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) # 沿列的方向拼接
- 广播机制
a = torch.arange(3).reshape(3,1) # a为3行1列
b = torch.arange(2).reshape(1,2) # b为1行2列
a + b # a复制列,b复制行,然后按元素相加
- 索引和切片
X[-1],X[1:3] # 最后一个元素, 第二个元素和第三个元素
X[1:2] = 9 # 指定索引来写入矩阵
X[0:2, :] = 12 # 第一行、第二行赋值为12 :表示沿轴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
- 转换为其他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)
# 线性代数
- 标量
import torch
x = torch.tensor(3.0)
y = torch.tensor(2.0)
x + y, x * y, x / y, x**y
- 向量
x = torch.arange(4)
- 矩阵
A = torch.arange(20).reshape(5, 4)
A.T
- 张量
X = torch.arange(24).reshape(2, 3, 4)
# 概率论



看到103页了