Pytorch 学习(4): Pytorch中Torch 工具包的数学操作汇总速查

版权声明:王家林大咖2018年新书《SPARK大数据商业实战三部曲》清华大学出版,清华大学出版社官方旗舰店(天猫)https://qhdx.tmall.com/?spm=a220o.1000855.1997427721.d4918089.4b2a2e5dT6bUsM https://blog.csdn.net/duan_zhihua/article/details/82526505

Pytorch 学习(4): Pytorch中Torch 工具包的数学操作汇总速查

          torch package 包含了多维张量的数据结构, 以及基于其上的多种数学操作. 此外, 它还提供了许多用于高效序列化 Tensor 和任意类型的实用工具包, 以及一起其它有用的实用工具包.

torch的操作方法汇总如下:

Tensors (张量)
torch.is_tensor(obj) 如果 obj 是一个 pytorch tensor, 则返回True.
torch.is_storage(obj) 如果 obj 是一个 pytorch storage object, 则返回True
torch.set_default_tensor_type(t) 设置默认类型
torch.numel(input) → int 返回 input Tensor 中的元素总数
torch.set_printoptions(precision=Nonethreshold=Noneedgeitems=Nonelinewidth=Noneprofile=None) 设置打印选项. Numpy 中采集数据
   
   
Creation Ops (创建操作)
torch.eye(nm=Noneout=None) 返回对角线位置全为1, 其它位置全为0的二维 tensor
torch.from_numpy(ndarray) → Tensor 从 numpy.ndarray 类 创建一个 Tensor 类
torch.linspace(startendsteps=100out=None) → Tensor 返回 start 和 end 之间等间隔 steps 点的一维 Tensor.输出 是尺寸 steps 为一维 tensor
torch.logspace(startendsteps=100out=None) → Tensor 返回一个在 10^start和 10^end之间的对数间隔 steps 点的一维 Tensor,输出是长度为 steps 的一维 tensor
torch.ones(*sizesout=None) → Tensor 返回填充了标量值 1 的 Tensor, 其形状由可变参数 sizes 定义
torch.ones_like(inputout=None) → Tensor 返回一个用标量值 1 填充的张量, 大小与 input 相同
torch.arange(start=0endstep=1out=None) → Tensor  从 start 用步长为 step 开始, 间隔在 [start, end) 中的值返回大小层次为 floor((end−start)/step)floor((end−start)/step) 的一维 Tensor.
torch.range(startendstep=1out=None) → Tensor 返回一个在 start 到 end 并且步长为 step 的区间内, 大小为 floor((end−start)/step)+1floor((end−start)/step)+1 为一维 Tensor.
torch.zeros(*sizesout=None) → Tensor 返回填充了标量值为 0 的 Tensor, 其形状由可变参量 sizes 定义
torch.zeros_like(inputout=None) → Tensor 返回一个用标量值 0 填充的 Tensor, 其大小与 input 相同.
   
   
   
Indexing, Slicing, Joining, Mutating Ops (索引, 切片, 连接, 换位) 操作
torch.cat(seqdim=0out=None) → Tensor 在给定维度上对输入的张量序列 seq 进行连接操作. 所有张量必须具有相同的形状(在 cat 维度中除外) 或为空.
torch.chunk(tensorchunksdim=0) 在给定维度(轴)上将输入张量进行分块处理.
torch.gather(inputdimindexout=None) → Tensor 沿给定轴 dim ,将输入索引张量 index 指定位置的值进行聚合.
torch.index_select(inputdimindexout=None) → Tensor 沿着指定维度 dim 对输入进行切片,取 index 中指定的相应项 ( index 为一个 LongTensor ),然后返回到一个新的张量.返回的张量与原始张量 Tensor 有相同的维度(在指定轴上)
torch.masked_select(inputmaskout=None) → Tensor 根据掩码张量 mask 中的二元值,取输入张量中的指定项 ( mask 为一个 ByteTensor ),将取值返回到一个新的一维张量.张量 mask 与 input 的 shape 或维度不需要相同,但是他们必须是 broadcastable .
torch.nonzero(inputout=None) → LongTensor 返回一个包含输入 input 中非零元素索引的张量. 输出张量中的每行包含 input 中非零元素的索引.如果输入张量 input 有 n 维,则输出的索引张量 out 的 size 为 z x n , 这里 z 是输入张量 input 中所有非零元素的个数.
torch.split(tensorsplit_sizedim=0) 将输入张量分割成相等 size 的 chunks (如果可分).如果沿指定维的张量形状大小不能被 split_size 整分, 则最后一个分块会小于其它分块
torch.squeeze(inputdim=Noneout=None) 将 input 张量 size 中的 1 去除并返回.如果 input 的 shape 如 (Ax1xBxCx1xD)(Ax1xBxCx1xD) ,那么输出 shape 就为: (AxBxCxD)
torch.stack(sequencedim=0out=None) 沿着一个新维度对输入张量序列进行连接.序列中所有的张量都应该为相同 size .
torch.t(inputout=None) → Tensor 预期 input 为一个矩阵 (2 维张量), 并转置 0, 1 维.可以被视为函数 transpose(input, 0, 1) 的简写函数
torch.take(inputindices) → Tensor 在给定的索引处返回一个新的 Tensor ,其元素为 input . 输入张量被看作是一维张量.结果与索引具有相同的 shape 
torch.transpose(inputdim0dim1out=None) → Tensor 返回输入矩阵 input 的转置.交换给定维度 dim0 和 dim1 .out 张量与 input 张量共享内存,所以改变其中一个会导致另外一个也被修改.
torch.unbind(tensordim=0) 移除一个张量的维度
torch.unsqueeze(inputdimout=None) 返回在指定位置插入维度 size 为 1 的新张量.返回张量与输入张量共享内存,所以改变其中一个的内容会改变另一个.如果 dim 为负,则将会被转化 dim+input.dim()+1
   
   
   
Random sampling (随机采样)
torch.manual_seed(seed) 设置生成随机数的种子,并返回一个 torch._C.Generator 对象
torch.initial_seed() 返回用于生成随机数字的初始种子 (python long) 
torch.get_rng_state() 以ByteTensor的形式返回随机数发生器的状态
torch.set_rng_state(new_state) 设置随机数发生器的参数
torch.bernoulli(inputout=None) → Tensor 从伯努利分布中抽取二进制随机数 (0 或 1)
torch.multinomial(inputnum_samplesreplacement=Falseout=None)→ LongTensor 返回一个张量, 其中每一行包含在 input 张量对应行中多项式分布取样的 num_samples 索引
torch.normal(meansstdout=None) 返回一个随机数张量, 随机数从给定平均值和标准差的离散正态分布中抽取.
torch.normal(mean=0.0stdout=None) 功能与上面函数类似, 但所有被抽取的元素共享均值
torch.normal(meansstd=1.0out=None) 功能与上面函数类似, 但所有被抽取的元素共享标准差
torch.rand(*sizesout=None) → Tensor 在区间 [0,1)[0,1) 中, 返回一个填充了均匀分布的随机数的张量.这个张量的形状由可变参数 sizes 来定义
torch.randn(*sizesout=None) → Tensor 返回一个从正态分布中填充随机数的张量, 其均值为 0 , 方差为 1 .这个张量的形状被可变参数 sizes 定义
torch.randperm(nout=None) → LongTensor 返回一个从 0 to n - 1 的整数的随机排列
In-place random sampling (直接随机采样)
torch.Tensor.bernoulli_()   torch.bernoulli() 的 in-place 版本
torch.Tensor.cauchy_()    从柯西分布中抽取数字
torch.Tensor.exponential_()   从指数分布中抽取数字
torch.Tensor.geometric_()    从几何分布中抽取元素
torch.Tensor.log_normal_()  对数正态分布中的样本
torch.Tensor.normal_()  是 torch.normal() 的 in-place 版本
torch.Tensor.random_()   离散均匀分布中采样的数字
torch.Tensor.uniform_()  正态分布中采样的数字
   
   
Serialization (序列化)
torch.save(objfpickle_module=<module 'cPickle' from '/usr/lib64/python2.7/lib-dynload/cPickle.so'>pickle_protocol=2) 将一个对象保存到一个磁盘文件中.
torch.load(fmap_location=Nonepickle_module=<module 'cPickle' from '/usr/lib64/python2.7/lib-dynload/cPickle.so'>) 从磁盘文件中加载一个用 torch.save() 保存的对象.
   
   
Parallelism (并行化)
torch.get_num_threads() → int 获得 OpenMP 并行化操作的线程数目
torch.set_num_threads(int) 设置 OpenMP 并行化操作的线程数目
   
   
Math operations (数学操作)
Pointwise Ops (逐点操作)
torch.abs(inputout=None) → Tensor 计算给定 input 张量的元素的绝对值
torch.acos(inputout=None) → Tensor 用 input 元素的反余弦返回一个新的张量
torch.add(inputvalueout=None) 将标量值 value 添加到输入张量 attr:input 的每个元素并返回一个新的结果张量
torch.add(inputvalue=1otherout=None) 张量 other 的每个元素乘以标量值 value 并加到张量 input 上, 返回生成的张量 out 
torch.addcdiv(tensorvalue=1tensor1tensor2out=None) → Tensor 将张量 tensor1 逐元素除以张量 tensor2, 然后乘以标量值 value 并加到张量 tensor 上.
torch.addcmul(tensorvalue=1tensor1tensor2out=None) → Tensor 将张量 tensor1 逐元素与张量 tensor2 相乘, 然后乘以标量值 value 并加到张量 tensor 上.
torch.asin(inputout=None) → Tensor 返回一个新的 Tensor , 其元素为张量 input 的每个元素的反正弦
torch.atan(inputout=None) → Tensor 返回一个新的 Tensor , 其元素为张量 input 的每个元素的反正切
torch.atan2(input1input2out=None) → Tensor 返回一个新的张量 Tensor , 其元素是输入张量 input1 和输入张量 input2 元素的反正切.
torch.ceil(inputout=None) → Tensor 返回一个新的张量 Tensor , 其元素是张量 input 的元素向上取整(取不小于每个元素的最小整数).
torch.clamp(inputminmaxout=None) → Tensor 将输入张量 input 所有元素限制在区间 [min, max] 中并返回一个结果张量
torch.clamp(input*minout=None) → Tensor 张量 input 的所有元素值大于或者等于 min
torch.clamp(input*maxout=None) → Tensor 张量 input 的所有元素值小于或者等于 max.
torch.cos(inputout=None) → Tensor 返回一个新的张量 Tensor , 其元素是张量 input 每个元素的余弦
torch.cosh(inputout=None) → Tensor 返回一个新的张量 Tensor , 其元素是张量 input 每个元素的双曲余弦
torch.div(inputvalueout=None) 将张量 input 的元素逐一除以标量值 value , 其结果作为一个新的张量返回.
torch.div(inputotherout=None) 张量 input 的元素与张量 other 的元素逐一相除. 返回一个新的结果张量 out . 张量 input 与张量 other 的形状必须可 broadcastable.outi=inputi/otheri
torch.erf(tensorout=None) → Tensor 计算每个元素的误差函数
torch.erfinv(tensorout=None) → Tensor 计算每个元素的反向误差函数
torch.exp(tensorout=None) → Tensor 计算每个元素的指数
torch.floor(inputout=None) → Tensor 返回一个新的张量 Tensor , 其元素是张量 input 的元素向下取整(取不大于每个元素的最大整数).
torch.fmod(inputdivisorout=None) → Tensor 计算除法余数.
torch.frac(tensorout=None) → Tensor 计算张量 tensor 每个元素的分数部分.
torch.lerp(startendweightout=None) 基于标量值 weight: , 在张量 start 与张量 end 之间做线性插值 并返回结果张量 out outi=starti+weight∗(endi−starti)
torch.log(inputout=None) → Tensor 返回一个新的张量 Tensor , 其元素是张量 input 所有元素的自然对数.
torch.log1p(inputout=None) → Tensor 返回一个新的张量 Tensor , 其元素是(1 + input) 的自然对数.yi=log(xi+1)
torch.mul(inputvalueout=None) 将输入张量 input 的每个元素与标量值 value 相乘并返回一个新的结果张量.out=tensor∗value
torch.mul(inputotherout=None) 张量 input 的元素与张量 other 的元素逐一相乘. 其结果作为一个新的张量返回.
torch.neg(inputout=None) → Tensor 返回一个新的张量 Tensor , 其元素是张量 input 的元素的负值.out=−1∗input
torch.pow(inputexponentout=None) 对输入张量 input 按元素求 exponent 次幂值并返回结果张量(其值作为结果张量的元素).
torch.pow(baseinputout=None) base 是一个标量浮点值, input 是一个张量. 返回的张量 out 的形状与张量 input 的形状相同.
torch.reciprocal(inputout=None) → Tensor 返回一个新的 Tensor , 其元素是张量 input 元素的倒数, i.e. 1.0/x
torch.remainder(inputdivisorout=None) → Tensor 计算元素的除法的余数.
torch.round(inputout=None) → Tensor 返回一个新的张量 Tensor , 其元素是输入张量的元素四舍五入到最近的整数
torch.rsqrt(inputout=None) → Tensor 返回一个新的张量 Tensor , 其元素是张量 input 元素的平方根的倒数.
torch.sigmoid(inputout=None) → Tensor 返回一个新的张量 Tensor , 其元素是张量 input 元素的sigmoid值
torch.sign(inputout=None) → Tensor 返回一个新的张量 Tensor , 其元素是张量 input 元素的符号.
torch.sin(inputout=None) → Tensor 返回一个新的张量 Tensor , 其元素是张量 input 元素的正弦.
torch.sinh(inputout=None) → Tensor 返回一个新的张量 Tensor , 其元素是张量 input 元素的双曲正弦
torch.sqrt(inputout=None) → Tensor 返回一个新的张量 Tensor , 其元素是张量 input 元素的平方根
torch.tan(inputout=None) → Tensor 返回一个新的张量 Tensor , 其元素是张量 input 元素的正切
torch.tanh(inputout=None) → Tensor 返回一个新的张量 Tensor , 其元素是张量 input 元素的双曲正切
torch.trunc(inputout=None) → Tensor 返回一个新的张量 Tensor , 其元素是张量 input 元素的截断整数值 (直接去除小数部分) .
Reduction Ops (归约操作)
torch.cumprod(inputdimout=None) → Tensor 返回元素 input 在给定维度 dim 下的累积积
torch.cumsum(inputdimout=None) → Tensor 返回元素 input 在给定维度 dim 下的累积和
torch.dist(inputotherp=2) → float 返回(input - other)的p-范数 input 和 other 的形状必须满足 broadcastable.
torch.mean(input) → float 返回张量 input 所有元素的均值.
torch.mean(inputdimkeepdim=Falseout=None) → Tensor 返回张量 input 在给定维度 dim 上每行的均值
torch.median(input) → float 返回输出张量 input 所有元素的中位数.
torch.median(inputdim=-1keepdim=Falsevalues=Noneindices=None) -> (TensorLongTensor) 返回输出张量 input 在给定维度 dim 下每行的中位数. 同时返回一个包含中位数的索引 LongTensor.
torch.mode(inputdim=-1keepdim=Falsevalues=Noneindices=None) -> (TensorLongTensor) 返回输入张量 input 在给定维数 dim 下每行元素的众数值. 同时也返回众数值的索引 LongTensor.
torch.norm(inputp=2) → float 返回输入张量 input 的p-范数
torch.norm(inputpdimkeepdim=Falseout=None) → Tensor 返回输入张量 input 在给定维度 dim 下每行元素的p-范数.
torch.prod(input) → float 返回输入张量 input 所有元素的乘积.
torch.prod(inputdimkeepdim=Falseout=None) → Tensor 返回输入张量 input 在给定维度 dim 下每行元素的积.
torch.std(inputunbiased=True) → float 返回输入张量 input 所有元素的标准差
torch.std(inputdimkeepdim=Falseunbiased=Trueout=None) → Tensor 返回输入张量 input 在给定维度 dim 下每行元素的标准差
torch.sum(input) → float 返回输入张量 input 所有元素的和
torch.sum(inputdimkeepdim=Falseout=None) → Tensor 返回输入张量 input 在给定维度 dim 下每行元素的和
torch.var(inputunbiased=True) → float 返回输入张量 input 的方差.
torch.var(inputdimkeepdim=Falseunbiased=Trueout=None) → Tensor 返回输入张量 input 在给定维度 dim 下每行的方差
Comparison Ops (比较操作)
torch.eq(inputotherout=None) → Tensor 比较元素是否相等
torch.equal(tensor1tensor2) → bool 如果两个张量有相同的形状和元素值, 则返回 True , 否则 False .
torch.ge(inputotherout=None) → Tensor 逐元素比较 input 和 other , 即是否 input>=other .
torch.gt(inputotherout=None) → Tensor 逐元素比较 input 和 other , 即是否 input>other 如果两个张量有相同的形状和元素值, 则返回 True ,否则 False
torch.kthvalue(inputkdim=Nonekeepdim=Falseout=None) -> (TensorLongTensor) 取输入张量 input 指定维上第 k 个最小值. 如果不指定 dim , 则默认为 input 的最后一维
torch.le(inputotherout=None) → Tensor 逐元素比较 input 和 other , 即是否 input<=other 如果两个张量有相同的形状和元素值, 则返回 True ,否则 False .
torch.lt(inputotherout=None) → Tensor 逐元素比较 input 和 other , 即是否 input<other 如果两个张量有相同的形状和元素值, 则返回 True ,否则 False
torch.max(input) → float 返回输入 input 张量所有元素的最大值
torch.max(inputdimkeepdim=Falseout=None) -> (TensorLongTensor) 返回输入张量 input 在给定维度 dim 上每行的最大值, 并同时返回每个最大值的位置索引.
torch.max(inputotherout=None) → Tensor 输入 input 每一个元素和对应的比较张量 other 进行比较, 留下较大的元素 max.
torch.min(input) → float 返回输入张量 input 所有元素的最小值
torch.min(inputdimkeepdim=Falseout=None) -> (TensorLongTensor) 返回输入张量 input 在给定维度 dim 下每行元素的最小值. 其中第二个返回值是每个被找出的最小值的索引位置 ( argmin )
torch.min(inputotherout=None) → Tensor 输入 input 每一个元素和对应的比较张量 other 进行比较, 留下较小的元素 min .
torch.ne(inputotherout=None) → Tensor 逐元素比较 input 和 other , 即是否 tensor != other 如果两个张量有相同的形状和元素值, 则返回 True , 否则 False .
torch.sort(inputdim=Nonedescending=Falseout=None) -> (TensorLongTensor) 对输入张量 input 沿着指定维按升序排序.
torch.topk(inputkdim=Nonelargest=Truesorted=Trueout=None) -> (TensorLongTensor) 沿给定 dim 维度返回输入张量 input k 个最大值. 如果不指定 dim , 则默认为 input 的最后一维. 如果为 largest False ,则返回最小的 k 个值. 返回一个元组 (values, indices) , 其中 indices 是原始输入张量 input 中测元素下标. 如果设定布尔值 sorted True , 将会确保返回的 k 个值被排序.
Other Operations (其它操作)
torch.cross(inputotherdim=-1out=None) → Tensor 返回沿着维度 dim 上, 两个张量 input 和 other 的向量积 (叉积), input 和 other 必须有相同的形状, 且指定的 dim 维上 size 必须为 3.
torch.diag(inputdiagonal=0out=None) → Tensor 如果输入是一个向量( 1D 张量), 则返回一个以 input 为对角线元素的 2D 方阵.如果输入是一个矩阵( 2D 张量), 则返回一个包含 input 对角线元素的1D张量.
torch.histc(inputbins=100min=0max=0out=None) → Tensor 计算输入张量的直方图
torch.renorm(inputpdimmaxnormout=None) → Tensor 返回一个张量, 包含规范化后的各个子张量, 使得沿着 dim 维划分的各子张量的 p 范数小于 maxnorm
torch.trace(input) → float 返回输入 2 维矩阵对角线元素的和(迹).
torch.tril(inputdiagonal=0out=None) → Tensor 返回一个张量, 包含输入矩阵 ( 2D 张量)的下三角部分, 其余部分被设为 0.
torch.triu(inputdiagonal=0out=None) → Tensor 返回一个张量, 包含输入矩阵 ( 2D 张量)的上三角部分, 其余部分被设为 0.
   
   
   
BLAS and LAPACK Operations (BLAS和LAPACK操作)
torch.addbmm(beta=1matalpha=1batch1batch2out=None) → Tensor 执行保存在 batch1 和 batch2 中的矩阵的批量点乘, 伴随着一个减少的相加步骤 (所有的矩阵乘法沿第一维累加). mat 被相加到最终的结果中.
torch.addmm(beta=1matalpha=1mat1mat2out=None) → Tensor 执行矩阵 mat1 和 mat2 的相乘. 矩阵 mat 将与相乘的最终计算结果相加.
torch.addmv(beta=1tensoralpha=1matvecout=None) → Tensor 执行矩阵 mat 和向量 vec 的相乘. 矩阵 tensor 将与相乘的最终计算结果相加.
torch.addr(beta=1matalpha=1vec1vec2out=None) → Tensor 执行向量:attr:vec1 和 vec2 的外积, 并把外积计算结果与矩阵 mat相加
torch.baddbmm(beta=1matalpha=1batch1batch2out=None) → Tensor 执行保存在 batch1 和 batch2 中的矩阵的批量点乘. mat 被相加到最终的结果中.
torch.bmm(batch1batch2out=None) → Tensor 执行保存在 batch1 batch2 中的矩阵的批量点乘.
torch.btrifact(Ainfo=Nonepivot=True) → Tensor, IntTensor 批量 LU 分解.
torch.btrisolve(bLU_dataLU_pivots) → Tensor 批量 LU .返回线性系统 Ax = b LU
torch.dot(tensor1tensor2) → float 计算两个张量的点乘 (内积).
torch.eig(aeigenvectors=Falseout=None) -> (TensorTensor) 计算实数方阵的特征值和特征向量.
torch.gels(BAout=None) → Tensor 计算秩为 mm 的, 大小为 m x n 的矩阵 AA 最小二乘和最小范数问题的解
torch.geqrf(inputout=None) -> (TensorTensor) 直接调用 LAPACK 的低层函数
torch.ger(vec1vec2out=None) → Tensor 计算 vec1 和 vec2 的外积. 如果 vec1 是一个长度为 n 的向量, vec2 是一个长度为 m 的向量, 那么 out 必须是一个 n x m 的矩阵
torch.gesv(BAout=None) -> (TensorTensor) X, LU = torch.gesv(B, A) , 该函数返回线性系统 AX=B  的解
torch.inverse(inputout=None) → Tensor 计算方阵 input 的逆.
torch.matmul(tensor1tensor2out=None) Matrix product of two tensors
torch.mm(mat1mat2out=None) → Tensor 执行 mat1 和 mat2 的矩阵乘法.
torch.mv(matvecout=None) → Tensor 执行矩阵 mat 与向量 vec 的乘法操作.
torch.potrf(aout=None) 计算半正定矩阵 a: Cholesky 分解
torch.potri(uout=None) 给定一个半正定矩阵的 Cholesky 分解因子 u, 计算该半正定矩阵的逆.
torch.potrs(buout=None) Solves a linear system of equations with a positive semidefinite matrix to be inverted given its given a Cholesky factor matrix u
torch.pstrf(aout=None) Computes the pivoted Cholesky decomposition of a positive semidefinite matrix a: returns matrices u and piv
torch.qr(inputout=None) -> (TensorTensor) 计算矩阵 input QR 分解. 返回矩阵 q r 使得 x=q∗rx=q∗r, q 是一个 正交矩阵, r 是一个上三角矩阵
torch.svd(inputsome=Trueout=None) -> (TensorTensorTensor) U, S, V = torch.svd(A) 返回大小为 (n x m) 的实矩阵 A 的奇异值分解, 使得 A=USV
torch.symeig(inputeigenvectors=Falseupper=Trueout=None) -> (TensorTensor) e, V = torch.symeig(input) 返回实对称矩阵 input 的特征值和特征向量.

详细案例参考Pytorch官网链接(http://pytorch.apachecn.org/cn/docs/0.3.0/torch.html#reduction-ops

The development of full artificial intelligencecould spell the end of the human race。
人工智能的发展可能会终结人类。

                                                                                              -----斯蒂芬·威廉·霍金(Stephen WilliamHawking)

猜你喜欢

转载自blog.csdn.net/duan_zhihua/article/details/82526505
今日推荐