跟着官方入门pytorch(二)

pytorch torch包

torch 包含了多维张量的数据结构以及基于其上的多种数学操作。

函数

  • torch.is_tensor(obj)
    判断obj是否为一个 pytorch tensor。
  • torch.is_storage(obj)
    判断obj是否为一个 pytorch storage对象。
  • torch.set_default_tensor_type(type)
    设置默认的tensor中的数据类型
  • torch.numel(tensor)
    返回tensor张量中的元素个数
  • torch.eye(n, m=None, out=None)
    返回一个2维float张量,对角线位置全1,其它位置全0。m默认等于n。
  • torch.from_numpy(ndarray)
    将numpy.ndarray 转换为pytorch的 longtensor。注意:返回的张量tensor和numpy的ndarray共享同一内存空间。修改一个会导致另外一个也被修改。
  • torch.linspace(start, end, steps=step, out=None)
    返回一个1维float张量,包含在区间start 和 end 上均匀间隔的step个点。 输出1维张量的长度为step。
  • torch.logspace(start, end, steps=step, out=None)
    返回一个1维float张量,包含在区间 10^{start}10^{end}上以对数刻度均匀间隔的steps个点。 输出1维张量的长度为step。
  • torch.rand(*sizes)
    返回一个float张量,包含了从区间[0,1)的均匀分布中抽取的一组随机数,形状由可变参数sizes 决定。
  • torch.randn(*sizes)
    返回一个float张量,包含了从标准正态分布N(0,1)中抽取的一组随机数,形状由可变参数sizes 决定。
  • torch.randperm(n)
    返回一个从0 到n -1 的随机整数排列构成的Longtensor。
  • torch.arange(start, end, step=steps)
    返回一个在区间[start,end)内,从start开始,step为步长的一组值构成的float张量。
  • torch.zeros(*sizes)
    返回一个全为标量 0 的float张量,形状由可变参数sizes 决定。
  • torch.cat(inputs, dimension=dimension)
    在给定维度上对输入的张量序列inputs进行连接操作。inputs:tensor构成的序列。
  • torch.chunk(tensor, chunks, dim=dimension)
    在给定维度上将输入张量进行分块。chunks:分块个数。
  • torch.gather(input, dim, index)
    沿给定轴dim,将输入的index张量对应的值进行聚合。
    index必须为longtensor。
    例子:
t = torch.Tensor([[1,2,3],[4,5,6]])
index_a = torch.LongTensor([[0,0],[0,1]])
index_b = torch.LongTensor([[0,1,1],[1,0,0]])
print(t)
print(torch.gather(t,dim=1,index=index_a))
print(torch.gather(t,dim=0,index=index_b))
>>tensor([[1., 2., 3.],
        [4., 5., 6.]])
>>tensor([[1., 1.],
        [4., 5.]])
>>tensor([[1., 5., 6.],
        [4., 2., 3.]])

计算torch.gather(t,dim=1,index=index_a)细节:

output[0,0] = input[0,index[0,0]]= input[0,0]=1
output[0,1] = input[0,index[0,1]]= input[0,0]=1
output[1,0] = input[1,index[1,0]]= input[1,0]=4
output[1,1] = input[1,index[1,1]]= input[1,1]=5

计算torch.gather(t,dim=0,index=index_b)细节:

output[0,0] = input[index[0,0],0]=input[0,0] = 1
output[0,1] = input[index[0,1],1]=input[1,1] = 5
output[0,2] = input[index[0,2],2]=input[1,2] = 6
output[1,0] = input[index[1,0],0]=input[1,0] = 4
output[1,1] = input[index[1,1],1]=input[0,1] = 2
output[1,2] = input[index[1,2],2]=input[0,2] = 3
  • torch.index_select(input, dim, index)
    沿着指定维度对输入选取指定index进行切片.
    index必须为longtensor。
  • torch.masked_select(input, mask, out=None)
    根据掩码张量mask中的二元值,取输入张量中的指定项( mask为一个 ByteTensor),将取值返回到一个新的1维张量。
    mask须跟input有相同数量的元素数目,但形状或维度不需要相同。
  • torch.nonzero(input)
    返回一个包含输入input中非零元素索引的张量。
  • torch.split(tensor, split_size, dim=0)
    将输入张量延指定维度分割成相等形状的split_size个trunks。
  • torch.squeeze(input, dim=None)
    将输入张量形状中的1 去除并返回。若指定dim,则只会在该给定维度上挤压。
    :返回张量与输入张量共享内存,所以改变其中一个的内容会改变另一个。
  • torch.stack(sequence, dim=0)
    沿着一个维度对输入张量序列进行连接。
    与cat的区别在于,stack会增加一个新的维度。例如a、b为2x3的tensor,在dim = 0时拼接,cat返回的结果为2x6的tensor,stack返回的结果为2x2x3的结果。
 a=torch.rand((1,2))
>>> b=torch.rand((1,2))
>>> print(a)
tensor([[0.8738, 0.8688]])
>>> print(b)
tensor([[0.9889, 0.6731]])
>>> print(torch.stack((a,b),0))
tensor([[[0.8738, 0.8688]],

        [[0.9889, 0.6731]]])
>>> print(torch.stack((a,b),1))
tensor([[[0.8738, 0.8688],
         [0.9889, 0.6731]]])
>>> print(torch.stack((a,b),0).size())
torch.Size([2, 1, 2])
>>> print(torch.stack((a,b),1).size())
torch.Size([1, 2, 2])
  • torch.t(input)
    输入一个矩阵(2维张量),并转置0, 1维。被视为函数transpose(input, 0, 1)的简写函数。
  • torch.transpose(input, dim0, dim1)
    输入矩阵input交换维度dim0和dim1。 输出张量与输入张量共享内存,改变其中一个会导致另外一个也被修改。
  • torch.unsqueeze(input, dim)
    在指定的维度增加一维。
  • torch.unbind(tensor,dim)
    删除某个维度。
  • torch.manual_seed(seed)
    设定生成随机数的种子。
  • torch.initial_seed()
    返回生成随机数的原始种子值。
  • torch.bernoulli(input)
    以input 对应位置的值作为伯努利分布中取1的概率,按该分布采样取值。
  • torch.normal(means, std)
    返回从正态分布采样得到的随机tensor。
  • torch.multinomial(input, num_samples,replacement=False, out=None)
    把input中的每行作为权重,采样得到对应的Index。replacement =Ture代表可重复采样。
  • torch.save(obj,f)
    将obj保存到f文件。
  • torch.load(f,map_location = location )
    读取f文件
# Load all tensors onto the CPU
>>> torch.load('tensors.pt', map_location='cpu')
# Load all tensors onto the CPU, using a function
>>> torch.load('tensors.pt', map_location=lambda storage, loc: storage)
# Load all tensors onto GPU 1
>>> torch.load('tensors.pt', map_location=lambda storage, loc: storage.cuda(1))
# Map tensors from GPU 1 to GPU 0
>>> torch.load('tensors.pt', map_location={'cuda:1':'cuda:0'})
  • torch.abs(input)
    对张量每个元素计算绝对值
  • torch.acos(input)
    对张量每个元素计算反余弦
  • torch.cos(input)
    对张量每个元素计算余弦
  • torch.cosh(input)
    对张量每个元素计算双曲余弦
  • torch.sinh(input)
    对张量每个元素计算双曲正弦
  • torch.sin(input)
    对张量每个元素计算正弦
  • torch.asin(input)
    对张量每个元素计算反正弦
  • torch.tan(input)
    对张量每个元素计算正切
  • torch.atan(input)
    对张量每个元素计算反正切
  • torch.tanh(input)
    对张量每个元素计算双曲正切
  • torch.ceil(input)
    对张量每个元素向上取整
  • torch.floor(input)
    对张量每个元素向下取整
  • torch.round(input)
    对张量每个元素四舍五入取整
  • torch.add(input, value)
    对张量每个元素加上value
  • torch.add(input, value=value, other)
    = (other*value)+input
    注:张量 input and other的尺寸不需要匹配,但元素总数必须一样
  • torch.addcdiv(tensor, value= value, tensor1, tensor2)
    用tensor2对tensor1逐元素相除,然后乘以标量值value 并加到tensor。
  • torch.addcmul(tensor, value=value, tensor1, tensor2)
    用tensor2对tensor1逐元素相乘,并对结果乘以标量值value然后加到tensor。
  • torch.clamp(input, min, max)
    对张量每个元素限制到区间[min,max]
  • torch.div(input, value)
    对张量每个元素除以value
  • torch.div(input,other)
    input与other逐元素相除
  • torch.exp(tensor)
    对张量每个元素求指数
  • torch.remainder(input, divisor)
    返回input张量每个元素除以divisor的余数,余数与除数divisor有相同的符号。
  • torch.fmod(input, divisor)
    返回input张量每个元素除以divisor的余数,余数与被除数input有相同的符号。
  • torch.frac(tensor)
    返回每个元素的分数部分。
  • torch.lerp(start, end, weight)
    返回start和end做线性插值的结果。
    out = start + weight*(end - start)
  • torch.log(input)
    返回每个元素的自然对数
  • torch.log1p(input)
    返回每个元素+1的自然对数
  • torch.mul(input, value)
    返回每个元素*value
  • torch.mul(input, other)
    返回input与other逐元素相乘
  • torch.neg(input)
    返回每个元素取负
  • torch.pow(input, exponent)
    返回input按元素求exponent次幂值。
    exponent为标量:out^i=input_i^{exponent}
    exponent为张量:out^i=input_i^{exponent_i}
  • torch.pow(base, input)
    base为标量,input张量:out^i=base^{input_i}
  • torch.reciprocal(input)
    返回每个元素的倒数
  • torch.rsqrt(input)
    返回每个元素的平方根倒数
  • torch.sigmoid(input)
    返回每个元素的sigmoid函数对应的值
  • torch.sign(input)
    返回每个元素的正负符号(+(-)1)
  • torch.sqrt(input)
    返回每个元素的平方根
  • torch.trunc(input)
    返回一个新张量,包含输入input张量每个元素的截断值(舍弃其小数部分)
  • torch.cumprod(input, dim)
    返回输入沿指定维度的累积积。
  • torch.cumsum(input, dim)
    返回输入沿指定维度的累积和。
  • torch.dist(input, other, p=p)
    返回 (input - other) 的 p范数 。
  • torch.mean(input)
    返回输入张量所有元素的均值。
  • torch.mean(input, dim)
    返回输入张量给定维度dim上每行的均值。
  • torch.median(input, dim=-1)
    返回给定维dim上,每行的中位数值和其索引。
  • torch.mode(input, dim=-1)
    返回给定维dim上,每行的众数值和其索引。
  • torch.norm(input, p=2)
    返回输入张量input 的p 范数。
    torch.norm(input, p, dim)
    返回输入张量给定维dim 上每行的p 范数。
  • torch.prod(input)
    返回输入张量input 所有元素的积。
  • torch.std(input)
    返回输入张量input 所有元素的标准差。
  • torch.sum(input)
    返回输入张量input 所有元素的和。
  • torch.sum(input, dim)
    返回输入张量给定维度上每行的和。
  • torch.var(input)
    返回输入张量所有元素的方差
  • torch.eq(input, other)
    逐元素比较input, other是否相等。
  • torch.equal(tensor1, tensor2)
    如果两个张量有相同的形状和元素值,则返回True ,否则 False
  • torch.ge(input, other)
    逐元素比较input和other,即是否 input>=other。
  • torch.gt(input, other)
    逐元素比较input和other。
  • torch.kthvalue(input, k, dim=None)
    取输入张量input指定维上第k 个最小值和其索引。
  • torch.le(input, other)
    逐元素比较input和other , 即是否input<=other
  • torch.lt(input, other)
    逐元素比较input和other , 即是否 input<other
  • torch.max(input)
    返回输入张量所有元素的最大值。
  • torch.min(input)
    返回输入张量所有元素的最小值。
  • torch.min(input, dim)
    返回输入张量给定维度上每行的最小值,并同时返回每个最小值的位置索引
  • torch.min(input, other)
    input中逐元素与other相应位置的元素对比,返回最小值到输出张量。
    out_i=min(tensor_i,other_i)
  • torch.ne(input, other)
    逐元素比较input和other , 即是否 input!=other。1相等,0不相等。
  • torch.sort(input, dim=None, descending=False)
    对输入张量input沿着指定维按升序排序。如果不给定dim,则默认为输入的最后一维。如果指定参数descending为True,则按降序排序。
  • torch.topk(input, k, dim=None, largest=True, sorted=True)
    返回沿给定dim维度输入张量input中 k 个最大值和其下标。largest为 False ,则返回最小的 k 个值。返回一个元组 (values,indices),sorted 为True,将会确保返回的 k 个值被排序。
  • torch.cross(input, other)
    返回两个张量input和other的向量积(叉积)
  • torch.diag(input, diagonal=0)
    如果输入是一个向量(1D 张量),则返回一个以input为对角线元素的2D方阵
    如果输入是一个矩阵(2D 张量),则返回一个包含input对角线元素的1D张量
    参数diagonal指定对角线
  • torch.histc(input, bins=bins, min=min, max=max)
    计算输入张量的直方图。以min和max为range边界,将其均分成bins个直条,然后将排序好的数据划分到各个直条(bins)中。如果min和max都为0, 则利用数据中的最大最小值作为边界。
  • torch.renorm(input, p, dim, maxnorm)
    返回一个张量,包含规范化后的各个子张量,使得沿着dim维划分的各子张量的p范数小于maxnorm。
    如果p范数的值小于maxnorm,则当前子张量不需要修改
  • torch.trace(input)
    返回输入2维矩阵对角线元素的迹
  • torch.tril(input, k=0)
    返回一个张量,包含输入矩阵(2D张量)的下三角部分,其余部分被设为0。
    参数k控制对角线: k = 0, 主对角线;k > 0, 主对角线之上 ;k < 0, 主对角线之下
  • torch.triu(input, k=0)
    返回一个张量,包含输入矩阵(2D张量)的上三角部分,其余部分被设为0。
    参数k控制对角线: k = 0, 主对角线;k > 0, 主对角线之上 ;k < 0, 主对角线之下
  • torch.addbmm(beta=1, mat, alpha=1, batch1, batch2)
    对两个批batch1和batch2内存储的矩阵进行批矩阵乘操作,附带reduced add 步骤( 所有矩阵乘结果沿着第一维相加)。矩阵mat加到最终结果。
    res=(beta∗mat)+(alpha∗\sum(batch1_i \times batch2_i))
  • torch.addmm(beta=1, mat, alpha=1, mat1, mat2)
    对矩阵mat1和mat2进行矩阵乘操作。矩阵mat加到最终结果。
    res = (beta*mat + (alpha* mat1 \times mat2)
  • torch.addmv(beta=1, tensor, alpha=1, mat, vec)
    对矩阵mat和向量vec对进行相乘操作。向量tensor加到最终结果。
    res = (beta*tensor + (alpha* mat \times vec)
  • torch.addr(beta=1, mat, alpha=1, vec1, vec2)
    对向量vec1和vec2对进行张量积操作。矩阵mat加到最终结果。
    res = (beta*mat + (alpha* vec1 \times vec2)
  • torch.baddbmm(beta=1, mat, alpha=1, batch1, batch2)
    对两个批batch1和batch2内存储的矩阵进行批矩阵乘操作,再加上矩阵mat得到最终结果。
    res_i = (beta*mat_i + (alpha* batch1_i \times batch2_i)
  • torch.bmm(batch1, batch2)
    对存储在两个批batch1和batch2内的矩阵进行批矩阵乘操作。
  • torch.dot(tensor1, tensor2)
    返回两个张量的点乘结果
  • torch.eig(a, eigenvectors=False)
    返回实方阵a 的特征值和特征向量
  • torch.ger(vec1, vec2)
    计算两向量vec1,vec2的张量积。n*m的矩阵
  • torch.inverse(input)
    返回方阵input的逆
  • torch.mm(mat1, mat2)
    返回矩阵mat1和mat2进行相乘的结果
  • torch.mv(mat, vec)
    返回矩阵mat和向量vec进行相乘的结果
  • torch.qr(input)
    计算输入矩阵的QR分解:返回两个矩阵q ,r, 使得 x=q∗r ,这里q 是一个半正交矩阵与 r 是一个上三角矩阵
  • torch.svd(input, some=True)
    返回对形如 n×m的实矩阵 A 进行奇异值分解的结果,U,S,V=torch.svd(A),A = USV^{'}
  • torch.symeig(input, eigenvectors=False)
    返回实对称矩阵input的特征值和特征向量。eigenvectors=False只计算特征值
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容