Torch常用函数
# 导入torch import torch # 定义一个张量 x torch.arange(12) print(x) # 查看形状 print(x.shape) # 查看张量的长度 print(len(x)) # 元素的总数 print(x.numel()) # 改变张量的形状 x x.reshape(3,4) print(x) # 创建元素全为0或1的矩阵 zeros torch.zeros((2,3,4)) print(zeros) ones torch.ones((2,3,4)) print(ones) # 创建特定元素的张量 tensor torch.tensor([[2,1,4,3],[1,2,3,4],[4,3,2,1]]) print(tensor) # 常见的数学运算 - * / ** 都可以按元素运算 x torch.tensor([1.0,2,4,8],dtype torch.float32) # 必须同种类型的元素才能进行运算 y torch.tensor([2,2,2,2],dtype torch.float32) print(x y) print(x - y) print(x * y) print(x / y) print(x ** y) # 按元素方式进行指数计算 print(torch.exp(x)) # 将多个张量连接在一起 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]]) print(torch.cat((x,y),dim 0)) print(torch.cat((x,y),dim 1)) # 通过逻辑运算符构建二元张量 print(x y) # 对张量中的所有元素进行求和 会产生一个只有一个元素的张量 print(x.sum()) # 指定求和汇总张量的轴 A torch.arange(20*2).reshape(2,5,4).float() print( ) A_sum_axis0 A.sum(dim 0) print(A_sum_axis0,A_sum_axis0.shape) print( ) A_sum_axis1 A.sum(dim 1) print(A_sum_axis1,A_sum_axis1.shape) print( ) A_sum_axis01 A.sum(dim [0,1]) print(A_sum_axis01,A_sum_axis01.shape) # 可以保持总轴数不变 方便广播 广播的注意事项在后面提到 print( ) sum_A A.sum(dim 1,keepdim True) print(sum_A) print(A / sum_A) # 某个轴计算A元素的累积总和 print(A.cumsum(dim 0)) # 与求和相关的量是 平均值 mean或average # 广播机制 当张量的维数相同时 即使对应的维度的大小不一致 也可以进行四则运算 # 对于a 会自动复制成 3 2 大小的张量 对于b 会自动复制成 3,2 大小的张量 # 对于标量与张量的运算 标量可以直接广播成张量 后面有个例子 a torch.arange(3).reshape(3,1) b torch.arange(2).reshape(1,2) print(a b) # 元素的访问 可以用[-1]访问最后一个元素 用[1:3]选择第二个和第三个元素 print(x[-1]) print(x[1:3]) # 元素的写入 x[1,2] 9 print(x) # 多个元素赋值相同 x[0:2,:] 12 print(x) # 运行一些操作会导致内存重新分配 before id(y) # id()返回y的唯一标识号 相当于指针一样 y y x # 重新赋值导致创建新的内存区域 print(id(y) before) # 执行原地操作 [:] z torch.zeros_like(y) print( id(z): ,id(z)) z[:] x y # 在z原本的内存区域上进行修改 print( id(z): ,id(z)) # 执行原地操作的另一种方法 复合赋值运算符 before id(x) print(id(x) before) # 转换numpy张量 a x.numpy() b torch.tensor(a) print(type(a),type(b)) # 将大小为1的张量转换为Python标量 a torch.tensor([3.5]) print(a,a.item(),float(a),int(a)) # 矩阵的转置 A torch.arange(20).reshape(5,4) print(A.T) # 复制一个矩阵的副本 重新分配内存 A torch.arange(20,dtype torch.float32).reshape(5,4) B A.clone() print(id(A) id(B)) # false # 两个矩阵的按元素乘法称为 哈达玛积 print(A * B) X torch.arange(24).reshape(2,3,4) print(a X) # 这里用了广播机制 print((a * X).shape) # 向量的点积 -- 一个数的张量 x torch.tensor([0,1,2,3],dtype torch.float32) y torch.tensor([1,1,1,1],dtype torch.float32) print(torch.dot(x,y)) # or x.dot(y) # 我们可以通过执行元素乘法 然后求和来表示两个向量的点积 print(torch.sum(x * y)) # 矩阵向量积Ax是一个长度为m的列向量 A torch.arange(20).reshape([5,4]) x torch.tensor([0,1,2,3]) print(torch.mv(A,x)) #mv指的是matrix 和 vector # 矩阵-矩阵乘法 A A.float() B torch.ones(4,3) print(torch.mm(A,B)) # 向量的L2范数 u torch.tensor([3.0,-4.0]) print(torch.norm(u)) # L1范数 print(torch.abs(u).sum()) # 矩阵的F范数 print(torch.norm(torch.ones((4,9))))
# 数据预处理 # 创建一个人工数据集 并存储在csv 逗号分隔值 文件 import os # 用pandas读取csv文件 import pandas as pd import torch os.makedirs(os.path.join( .. , data ),exist_ok True) # ..表示上一级目录 data_file os.path.join( .. , data , house_tiny.csv ) with open(data_file, w ) as f: f.write( NumRooms,Alley,Pricen ) # 列名 f.write( NA,Pave,127500n ) # 每行表示一个数据样本 f.write( 2,NA,106000n ) f.write( 4,NA,178100n ) f.write( NA,NA,140000n ) data pd.read_csv(data_file) print(data) # 处理缺失的数据 插值和删除 这里将考虑插值 inputs, outputs data.iloc[:,0:2], data.iloc[:,2] print(type(inputs)) inputs inputs.fillna(inputs.mean()) # 对于数字的列 用平均来填充 print(inputs) # 对于inputs中的类别值或离散值 我们将“NaN”视作一个类别.增加一列表示NaN inputs pd.get_dummies(inputs,dummy_na True) print(inputs) # 对于inputs和outputs中的所有条目都是数值类型 它们可以转换为张量格式 x,y torch.tensor(inputs.values), torch.tensor(outputs.values) print(x,y)线性代数 矩阵、向量、标量之间的求导
向量的链式法则
1、线性回归 2、Softmax回归 3、多层感知机 4、模型选择 5、过拟合、欠拟合 6、权重衰退 7、Dropout 8、数值稳定性 9、模型初始化和激活函数



