Pytorch常用函数积累
2018-03-26 11:40
447 查看
Pytorch中文文档
1、torch.index_select(input, dim, index, out=None) → Tensor
在指定维度dim方向上从input中抽取由位置序列index所指定的值。output的其他维度的长度和原来矩阵相同,在第dim维度上的长度和index的长度相同。
2、 pytorch的数学操作
mm与dot
Pytorch 的 mm 是矩阵的外积,而dot是元素对应积,即对应位置的元素相乘,需要左右矩阵形状一致。这点和numpy、mxnet不一样。
torch.div()
torch.div(input, value, out=None)
将input逐元素除以标量值value,并返回结果到输出张量out。 即 out=tensor/value
如果输入是FloatTensor or DoubleTensor类型,则参数 value 必须为实数,否则须为整数。【译注:似乎并非如此,无关输入类型,value取整数、实数皆可。】
参数:
input (Tensor) – 输入张量
value (Number) – 除数
out (Tensor, optional) – 输出张量
torch.svd()
torch.svd(input, some=True, out=None) -> (Tensor, Tensor, Tensor)
U,S,V=torch.svd(A)。 返回对形如 n×m的实矩阵 A 进行奇异值分解的结果,使得 A=USV’∗。 U 形状为 n×n,S 形状为 n×m ,V 形状为 m×m
some 代表了需要计算的奇异值数目。如果 some=True, it computes some and some=False computes all.
参数:
input (Tensor) – 输入的2维张量
some (bool, optional) – 布尔值,控制需计算的奇异值数目
out (tuple, optional) – 结果tuple
torch.diag
torch.diag(input, diagonal=0, out=None) → Tensor
如果输入是一个向量(1D 张量),则返回一个以input为对角线元素的2D方阵
如果输入是一个矩阵(2D 张量),则返回一个包含input对角线元素的1D张量
参数diagonal指定对角线:
diagonal = 0, 主对角线
diagonal > 0, 主对角线之上
diagonal < 0, 主对角线之下
input (Tensor) – 输入张量
diagonal (int, optional) – 指定对角线
out (Tensor, optional) – 输出张量
例如:
取得以input为对角线的方阵:
取得给定矩阵第k个对角线:
3、torch.unsqueeze 与 torch.squeeze
torch.unsqueeze
torch.unsqueeze(input, dim, out=None)
返回一个新的张量,对输入的制定位置插入维度 1
注意: 返回张量与输入张量共享内存,所以改变其中一个的内容会改变另一个。
如果dim为负,则将会被转化dim+input.dim()+1
参数:
tensor (Tensor) – 输入张量
dim (int) – 插入维度的索引
out (Tensor, optional) – 结果张量
torch.squeeze
torch.squeeze(input, dim=None, out=None)
将输入张量形状中的1 去除并返回。 如果输入是形如(A×1×B×1×C×1×D),那么输出形状就为: (A×B×C×D)
当给定dim时,那么挤压操作只在给定维度上。例如,输入形状为: (A×1×B), squeeze(input, 0) 将会保持张量不变,只有用 squeeze(input, 1),形状会变成 (A×B)。
注意: 返回张量与输入张量共享内存,所以改变其中一个的内容会改变另一个。
参数:
input (Tensor) – 输入张量
dim (int, optional) – 如果给定,则input只会在给定维度挤压
out (Tensor, optional) – 输出张量
4、expand(*sizes)
返回tensor的一个新视图,单个维度扩大为更大的尺寸。 tensor也可以扩大为更高维,新增加的维度将附在前面。 扩大tensor不需要分配新内存,只是仅仅新建一个tensor的视图,其中通过将stride设为0,一维将会扩展位更高维。任何一个一维的在不分配新内存情况下可扩展为任意的数值。
参数: sizes(torch.Size or int…) 需要扩展的大小
expand_as(tensor)
将tensor扩展为参数tensor的大小。 该操作等效与:
5、index_copy_(dim, index, tensor) → Tensor
按参数index中的索引数确定的顺序,将参数tensor中的元素复制到原来的tensor中。参数tensor的尺寸必须严格地与原tensor匹配,否则会发生错误。
参数:
- dim (int)-索引index所指向的维度
- index (LongTensor)-需要从tensor中选取的指数
- tensor (Tensor)-含有被复制元素的tensor.
1、torch.index_select(input, dim, index, out=None) → Tensor
>>> x = torch.randn(3, 4) >>> x 1.2045 2.4084 0.4001 1.1372 0.5596 1.5677 0.6219 -0.7954 1.3635 -1.2313 -0.5414 -1.8478 [torch.FloatTensor of size 3x4] >>> indices = torch.LongTensor([0, 2]) >>> torch.index_select(x, 0, indices) 1.2045 2.4084 0.4001 1.1372 1.3635 -1.2313 -0.5414 -1.8478 [torch.FloatTensor of size 2x4] >>> torch.index_select(x, 1, indices) 1.2045 0.4001 0.5596 0.6219 1.3635 -0.5414 [torch.FloatTensor of size 3x2]
在指定维度dim方向上从input中抽取由位置序列index所指定的值。output的其他维度的长度和原来矩阵相同,在第dim维度上的长度和index的长度相同。
2、 pytorch的数学操作
mm与dot
Pytorch 的 mm 是矩阵的外积,而dot是元素对应积,即对应位置的元素相乘,需要左右矩阵形状一致。这点和numpy、mxnet不一样。
torch.div()
torch.div(input, value, out=None)
将input逐元素除以标量值value,并返回结果到输出张量out。 即 out=tensor/value
如果输入是FloatTensor or DoubleTensor类型,则参数 value 必须为实数,否则须为整数。【译注:似乎并非如此,无关输入类型,value取整数、实数皆可。】
参数:
input (Tensor) – 输入张量
value (Number) – 除数
out (Tensor, optional) – 输出张量
torch.svd()
torch.svd(input, some=True, out=None) -> (Tensor, Tensor, Tensor)
U,S,V=torch.svd(A)。 返回对形如 n×m的实矩阵 A 进行奇异值分解的结果,使得 A=USV’∗。 U 形状为 n×n,S 形状为 n×m ,V 形状为 m×m
some 代表了需要计算的奇异值数目。如果 some=True, it computes some and some=False computes all.
参数:
input (Tensor) – 输入的2维张量
some (bool, optional) – 布尔值,控制需计算的奇异值数目
out (tuple, optional) – 结果tuple
>>> a = torch.Tensor([[8.79, 6.11, -9.15, 9.57, -3.49, 9.84], ... [9.93, 6.91, -7.93, 1.64, 4.02, 0.15], ... [9.83, 5.04, 4.86, 8.83, 9.80, -8.99], ... [5.45, -0.27, 4.85, 0.74, 10.00, -6.02], ... [3.16, 7.98, 3.01, 5.80, 4.27, -5.31]]).t() >>> a 8.7900 9.9300 9.8300 5.4500 3.1600 6.1100 6.9100 5.0400 -0.2700 7.9800 -9.1500 -7.9300 4.8600 4.8500 3.0100 9.5700 1.6400 8.8300 0.7400 5.8000 -3.4900 4.0200 9.8000 10.0000 4.2700 9.8400 0.1500 -8.9900 -6.0200 -5.3100 [torch.FloatTensor of size 6x5] >>> u, s, v = torch.svd(a) >>> u -0.5911 0.2632 0.3554 0.3143 0.2299 -0.3976 0.2438 -0.2224 -0.7535 -0.3636 -0.0335 -0.6003 -0.4508 0.2334 -0.3055 -0.4297 0.2362 -0.6859 0.3319 0.1649 -0.4697 -0.3509 0.3874 0.1587 -0.5183 0.2934 0.5763 -0.0209 0.3791 -0.6526 [torch.FloatTensor of size 6x5] >>> s 27.4687 22.6432 8.5584 5.9857 2.0149 [torch.FloatTensor of size 5] >>> v -0.2514 0.8148 -0.2606 0.3967 -0.2180 -0.3968 0.3587 0.7008 -0.4507 0.1402 -0 4000 .6922 -0.2489 -0.2208 0.2513 0.5891 -0.3662 -0.3686 0.3859 0.4342 -0.6265 -0.4076 -0.0980 -0.4932 -0.6227 -0.4396 [torch.FloatTensor of size 5x5] >>> torch.dist(a, torch.mm(torch.mm(u, torch.diag(s)), v.t())) 8.934150226306685e-06
torch.diag
torch.diag(input, diagonal=0, out=None) → Tensor
如果输入是一个向量(1D 张量),则返回一个以input为对角线元素的2D方阵
如果输入是一个矩阵(2D 张量),则返回一个包含input对角线元素的1D张量
参数diagonal指定对角线:
diagonal = 0, 主对角线
diagonal > 0, 主对角线之上
diagonal < 0, 主对角线之下
input (Tensor) – 输入张量
diagonal (int, optional) – 指定对角线
out (Tensor, optional) – 输出张量
例如:
取得以input为对角线的方阵:
>>> a = torch.randn(3) >>> a 1.0480 -2.3405 -1.1138 [torch.FloatTensor of size 3] >>> torch.diag(a) 1.0480 0.0000 0.0000 0.0000 -2.3405 0.0000 0.0000 0.0000 -1.1138 [torch.FloatTensor of size 3x3] >>> torch.diag(a, 1) 0.0000 1.0480 0.0000 0.0000 0.0000 0.0000 -2.3405 0.0000 0.0000 0.0000 0.0000 -1.1138 0.0000 0.0000 0.0000 0.0000 [torch.FloatTensor of size 4x4]
取得给定矩阵第k个对角线:
>>> a = torch.randn(3, 3) >>> a -1.5328 -1.3210 -1.5204 0.8596 0.0471 -0.2239 -0.6617 0.0146 -1.0817 [torch.FloatTensor of size 3x3] >>> torch.diag(a, 0) -1.5328 0.0471 -1.0817 [torch.FloatTensor of size 3] >>> torch.diag(a, 1) -1.3210 -0.2239 [torch.FloatTensor of size 2]
3、torch.unsqueeze 与 torch.squeeze
torch.unsqueeze
torch.unsqueeze(input, dim, out=None)
返回一个新的张量,对输入的制定位置插入维度 1
注意: 返回张量与输入张量共享内存,所以改变其中一个的内容会改变另一个。
如果dim为负,则将会被转化dim+input.dim()+1
参数:
tensor (Tensor) – 输入张量
dim (int) – 插入维度的索引
out (Tensor, optional) – 结果张量
>>> x = torch.Tensor([1, 2, 3, 4]) >>> torch.unsqueeze(x, 0) 1 2 3 4 [torch.FloatTensor of size 1x4] >>> torch.unsqueeze(x, 1) 1 2 3 4 [torch.FloatTensor of size 4x1]
torch.squeeze
torch.squeeze(input, dim=None, out=None)
将输入张量形状中的1 去除并返回。 如果输入是形如(A×1×B×1×C×1×D),那么输出形状就为: (A×B×C×D)
当给定dim时,那么挤压操作只在给定维度上。例如,输入形状为: (A×1×B), squeeze(input, 0) 将会保持张量不变,只有用 squeeze(input, 1),形状会变成 (A×B)。
注意: 返回张量与输入张量共享内存,所以改变其中一个的内容会改变另一个。
参数:
input (Tensor) – 输入张量
dim (int, optional) – 如果给定,则input只会在给定维度挤压
out (Tensor, optional) – 输出张量
>>> x = torch.zeros(2,1,2,1,2) >>> x.size() (2L, 1L, 2L, 1L, 2L) >>> y = torch.squeeze(x) >>> y.size() (2L, 2L, 2L) >>> y = torch.squeeze(x, 0) >>> y.size() (2L, 1L, 2L, 1L, 2L) >>> y = torch.squeeze(x, 1) >>> y.size() (2L, 2L, 1L, 2L)
4、expand(*sizes)
返回tensor的一个新视图,单个维度扩大为更大的尺寸。 tensor也可以扩大为更高维,新增加的维度将附在前面。 扩大tensor不需要分配新内存,只是仅仅新建一个tensor的视图,其中通过将stride设为0,一维将会扩展位更高维。任何一个一维的在不分配新内存情况下可扩展为任意的数值。
参数: sizes(torch.Size or int…) 需要扩展的大小
>>> x = torch.Tensor([[1], [2], [3]]) >>> x.size() torch.Size([3, 1]) >>> x.expand(3, 4) 1 1 1 1 2 2 2 2 3 3 3 3 [torch.FloatTensor of size 3x4]
expand_as(tensor)
将tensor扩展为参数tensor的大小。 该操作等效与:
self.expand(tensor.size())
5、index_copy_(dim, index, tensor) → Tensor
按参数index中的索引数确定的顺序,将参数tensor中的元素复制到原来的tensor中。参数tensor的尺寸必须严格地与原tensor匹配,否则会发生错误。
参数:
- dim (int)-索引index所指向的维度
- index (LongTensor)-需要从tensor中选取的指数
- tensor (Tensor)-含有被复制元素的tensor.
>>> x = torch.Tensor(3, 3) >>> t = torch.Tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>> index = torch.LongTensor([0, 2, 1]) >>> x.index_copy_(0, index, t) >>> x 1 2 3 7 8 9 4 5 6 [torch.FloatTensor of size 3x3]
相关文章推荐
- JNI学习积累之一 ---- 常用函数大全
- pytorch里一些函数的说明记录
- JNI学习积累之一 ---- 常用函数大全
- JNI学习积累之一 ---- 常用函数大全
- JNI学习积累之一 ---- 常用函数大全
- PHP 常用函数积累
- JNI学习积累之一 ---- 常用函数大全
- 常用函数积累
- JNI学习积累之一 ---- 常用函数大全
- JNI学习积累之一 ---- 常用函数大全
- [积累]c#.net常用函数
- JNI学习积累之一 ---- 常用函数大全
- c++一些常用函数的积累
- JNI学习积累之一 ---- 常用函数大全
- JNI学习积累之一 ---- 常用函数大全
- JNI学习积累之一 ---- 常用函数大全
- c++一些常用函数的积累
- JNI学习积累之一 ---- 常用函数大全
- JNI学习积累之一 ---- 常用函数大全
- JNI学习积累之一 ---- 常用函数大全