创建行向量
x = torch.arange(n)
其中,n代表该向量的长度,方法.arange()默认创建从零开始,整数递增的浮点数。
访问张量形状、求张量元素总数、调整张量形状
x.shape
返回张量x沿每个轴的长度。
x.numel()
返回张量内元素总数。
x.reshape(a,b)
将x调整为a×b形状的矩阵。
(等价于x.reshape(a,-1))(等价于x.reshape(-1,b))
创建全零和全一张量、高斯分布随机采样、创建自定义张量
torch.zeros(a,b,c)
torch.ones(a,b,c)
torch.randn(3,4)
#生成3*4的矩阵,元素服从均值为0,标准差为1的高斯分布。
torch.tensor([..],[..])
#创建自定义张量。
== 数据按位运算==
+, -, *, /, **,exp()
均是按照元素位进行运算。
张量连接
torch.cat((x,y), dim=n)
#将张量x和y在第n维度相连接。
逻辑运算,全元素求和
x==y
对于每个位置,这两张量元素相同得到True,元素不相同返回False。
x.sum()
返回张量中所有元素的和。
广播机制
形状不同时,复制元素扩展张量,再进行运算。
两个数据的后缘维度必须一致,或者维度为一。
读取数据集
import pandas as pd
import os
data_file = os.path.join(‘..’,’data’,’file_name.csv’)
pd.read_csv(data_file)
通常使用pandas包,首先是读取数据集, data_file是数据文件路径,“…”代表返回上一层文件夹。
os.makedirs(路径,exist_ok=True)
用于新建文件路径。
处理缺失值
插值法和删除法
data.iloc[:,0:2]
得到数据的某几列。
data.fillna(data.mean())
利用均值填充“NaN”项。
转换为张量格式
import torch
X = torch.tensor(data.values)
线性代数
x.T
对矩阵x进行转置。
x.clone()
深拷贝副本。
A * B
仅仅对应元素相乘(Hadamard积)。
A.sum(axis=0)
沿着轴0进行降维。
A.sum(axis=1, keepdims=True)
每一行求和(相当于降维到列),保持维数不变。
A.mean()
求矩阵A的元素均值。
A.numel()
求矩阵A的元素个数 。
torch.dot(x, y)
点积:按元素位相乘后,求和等价于torch.sum(x * y)。
torch.mv(A, x)
向量积:矩阵乘向量。
torch.mm(A, B)
矩阵乘法。
torch.abs(u).sum()
一阶范数。
torch.norm(u)
欧式距离(二阶范数)。
微积分
定义函数:def f(x): return 3 * x ** 2 - 4 * x
定义求导:def numerical_lim(f, x, h): return (f(x + h) - f(x)) / h
打印结果:(保留五位小数)
print(f'h={h:.5f}, numerical limit = {numerical_lim(f, 1, h):.5f}')
自动微分
如果x与y存在关系:y = 2 * torch.dot(x, x)
x.requires_grad_(True)
允许得到x的梯度。
y.backward()
通过调⽤反向传播函数来⾃动计算y关于x每个分量的梯度。结果存在x.grad
中。
x.grad.zero_()
清除计算过程保存的梯度值,用来防止内存耗尽。
u = y.detach()
若存在关系z=f(x,y) , y=t(x) 那么在计算z关于x的梯度时,y仅仅是一个中间量,计算图中不需要保存计算y的过程信息。利用变量u替代中间变量y,这样梯度不会经过u流向x。