有条件的可以直接查看英文的文档。下面给出一些翻译和我的理解:
view(*shape) → Tensor
返回与该张量具有相同数据但形状不同的新张量。
返回的张量具有相同的数据,并且必须具有相同数量的元素,但可能具有不同的大小。对于要查看的张量,新视图大小必须与其原始大小和跨距兼容,即每个新视图维度必须是原始维度的子空间,或者仅跨原始维度 d 、 d + 1 、 … 、 d + k d、d+1、\dots、d+k d、d+1、…、d+k,满足以下类似于连续性的条件,即所有 ∀ i = 0 、 … 、 k − 1 ∀i=0、\dots、k-1 ∀i=0、…、k−1,有:
s t r i d e [ i ] = s t r i d e [ i + 1 ] × s i z e [ i + 1 ] stride[i]=stride[i+1]×size[i+1] stride[i]=stride[i+1]×size[i+1]
如果不满足这个条件,我们还要在使用这个函数之前用别的函数使得他满足这个条件。
函数传入的参数为 s h a p e ( t o r c h . S i z e o r i n t . . . ) shape (torch.Size or int...) shape(torch.Sizeorint...),即我们想使用到的形状,或者说从函数名字来理解就是得到我们想看到的数据的视角。
故数据本身是没变的,但是展现给我们的视角(view)变了。
使用例子:
>>> x = torch.randn(4, 4)
>>> x.size()
torch.Size([4, 4])
>>> y = x.view(16)
>>> y.size()
torch.Size([16])
>>> z = x.view(-1, 8) # the size -1 is inferred from other dimensions
>>> z.size()
torch.Size([2, 8])
>>> a = torch.randn(1, 2, 3, 4)
>>> a.size()
torch.Size([1, 2, 3, 4])
>>> b = a.transpose(1, 2) # Swaps 2nd and 3rd dimension
>>> b.size()
torch.Size([1, 3, 2, 4])
>>> c = a.view(1, 3, 2, 4) # Does not change tensor layout in memory
>>> c.size()
torch.Size([1, 3, 2, 4])
>>> torch.equal(b, c)
False
一个连续的容器。模块将按在构造函数中传递的顺序添加到其中。或者,模块的有序模块序列也可以传入。
为了更容易理解,下面是一个小例子:
# Example of using Sequential
model = nn.Sequential(
nn.Conv2d(1,20,5),
nn.ReLU(),
nn.Conv2d(20,64,5),
nn.ReLU()
)
# Example of using Sequential with OrderedDict
model = nn.Sequential(OrderedDict([
('conv1', nn.Conv2d(1,20,5)),
('relu1', nn.ReLU()),
('conv2', nn.Conv2d(20,64,5)),
('relu2', nn.ReLU())
]))
从开发者的角度来看就是pytorch已经帮你把你想要搭建的网络的容器给做好了,就等着你往这容器里一层一层添加东西,加好了,你的网络结构就搭建好了。感觉很是实用啊!
torch.transpose(input, dim0, dim1) → Tensor
# 或者input.transpose(dim0, dim1)
该函数返回一个张量,它是输入的转置版本。将交换给定的尺寸标注dim0和dim1。其中dim0和dim1是两个要交换的维度。
生成的输出张量与输入张量共享其底层存储,因此更改一个张量的内容将更改另一个张量的内容。
>>> x = torch.randn(2, 3)
>>> x
tensor([[ 1.0028, -0.9893, 0.5809],
[-0.1669, 0.7299, 0.4942]])
>>> torch.transpose(x, 0, 1)
tensor([[ 1.0028, -0.1669],
[-0.9893, 0.7299],
[ 0.5809, 0.4942]])
用法:
torch.mm(input, mat2, out=None) → Tensor
执行矩阵输入与mat2的矩阵乘法。
如果输入是 n × m n\times m n×m的张量,mat2是 m × p m \times p m×p的张量,则输出是 n × p n \times p n×p的张量。我们可以理解为这是pytorch中给出的矩阵乘法。值得注意的是这个乘法不能在网络中传播,如果需要能够传播,需要用到matmul()函数。
>>> mat1 = torch.randn(2, 3)
>>> mat2 = torch.randn(3, 3)
>>> torch.mm(mat1, mat2)
tensor([[ 0.4851, 0.5037, -0.3633],
[-0.0760, -3.6705, 2.4784]])
torch.stack(tensors, dim=0, out=None) → Tensor
该函数沿新维度连接张量序列。所有的张量必须是相同的大小。
其中,tensors(张量序列)–要连接的张量序列
dim(int)–要插入的尺寸。必须介于0和连接张量(包括)的维数之间
out(张量,可选)–输出张量。
这个其实就是一个staticmethod函数,前面的@是修饰器的用法。前面Python的基础部分专门写过修饰器的用法。
staticmethod函数返回函数的静态方法。
该方法不强制要求传递参数,如下声明一个静态方法:参考菜鸟教程
class C(object):
@staticmethod
def f(arg1, arg2, ...):
...
以上实例声明了静态方法 f,从而可以实现实例化使用 C().f(),当然也可以不实例化调用该方法 C.f()。
总结就是使用了静态方法的函数不需要实例化就可以使用。