在Pytorch中如何使用连续的

  介绍

这篇文章主要介绍”在Pytorch中如何使用连续的”,在日常操作中,相信很多人在在Pytorch中如何使用连续的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”在Pytorch中如何使用相邻”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

举个栗子,在使用的转置()进行转置操作时,Pytorch并不会创建新的,转置后的张量,而是修改了张量中的一些属性(也就是元数据),使得此时的抵消和步幅是与转置张量相对应的。

转置的张量和原张量的内存是共享的!

为了证明这一点,我们来看下面的代码:

x =, torch.randn (3, 2)   时间=y  x.transpose (x,, 0,, 1)   x (0, 0),=233   打印(y (0, 0))   #,print  233

可以看的到,改变了y的元素的值的同时,x的元素的值也发生了变化。

也就是说,经过上述操作后得到的张量,它内部数据的布局方式和从头开始创建一个这样的常规的张量的布局方式是不一样的!于是…这就有连续的()的用武之地了。

在上面的例子中,x是连续的,但y不是(因为内部数据不是通常的布局方式)。

注意不要被相邻的字面意思”连续的“误解,张量中数据还是在内存中一块区域里,只是布局的问题。

当调用连续()时,会强制拷贝一份张量,让它的布局和从头创建的一毛一样。

一般来说这一点不用太担心,如果你没在需要调用连续的()的地方调用连续的(),运行时会提示你:

RuntimeError:输入不是连续的

只要看到这个错误提示,加上连续()就好啦~

<强>补充:pytorch之扩大,收集、挤压,和,相邻,softmax,马克斯,argmax

torch.gather聚集(输入、模糊指数=None)。对指定维进行索引。比如4 * 3的张量,对暗=1进行索引,那么指数的取值范围就是0 ~ 2。

输入是一个张量,指数是索引张量.input和指数的大小要么全部维度都相同,要么指定的暗淡的那一维度值不同。输出为和指数大小相同的张量。

import 火炬=torch.tensor ([[1, 2, 3]。   ,,,,,,,(1.1,1.2,1.3),   ,,,,,,,(2.1,2.2,2.3),   ,,,,,,,(3.1,3.2,3.3)])   b=torch.LongTensor ([[1、2、1)   ,,,,,,,,,(2,2,2),   ,,,,,,,,,(2,2,2),   ,,,,,,,,,[1 1 0]])   b=b.view (4,3),   打印(a.gather (b))   打印(a.gather (0, b))   c=torch.LongTensor ([1, 2, 0, 1])   c=c.view (4,1)   打印(a.gather (1 c)

输出:

张量([[,0.2000,0.3000,0.2000),   (,,,,1.3000,1.3000,1.3000),   (,,,,2.3000,2.3000,2.3000),   (,,,,3.2000,3.2000,3.1000]])   张量([[2.2000,1.1000,1.3000),   (,,,,2.1000,2.2000,2.3000),   (,,,,2.1000,2.2000,2.3000),   (,,,,1.1000,1.2000,0.3000]])   张量([[,0.2000],   ,,,,1.3000,   ,,,,2.1000,   ,,,3.2000 [,]])

挤将维度为1的压缩掉。如大小为(3,1,1,2),压缩之后为(3 2)

import 火炬   一个=torch.randn (2, 1, 1, 3)   print ()   print (a.squeeze ())

输出:

张量([[[[-0.2320,,0.9513,1.1613]]],   ,,,[[[,0.0901,0.9613,-0.9344]]]])   张量([[-0.2320,,0.9513,1.1613),   ,,,(0.9613,0.0901,,-0.9344]])

扩张扩展某个大小为1的维度。如(2、2、1)扩展为(2,2,3)

import 火炬   x=torch.randn (2、2、1)   打印(x)   y=x.expand (2, 2, 3)   打印(y)

输出:

张量([[[,0.0608],   ,,,,,2.2106],   ,   ,,,[[-1.9287],   ,,,,0.8748 [,]]])   张量([[[0.0608,0.0608,0.0608),   ,,,,,,2.2106,2.2106,2.2106),   ,   ,,,[[-1.9287,,-1.9287,-1.9287),   ,,,,,,0.8748,0.8748,0.8748]]])

大小为(m, n, d)的张量,昏暗的=1时,输出为大小为(m, d)的张量

import 火炬   一个=torch.tensor ([[[1, 2, 3], [4、8、12]], [[1, 2, 3], [4、8、12]]])   print (a.sum ())   print (a.sum(暗=1)

输出:

张量(60)   张量([[,5,10,15),   (,,,,5,10,15]])

连续返回一个内存为连续的张量,如本身就是连续的,返回它自己。一般用在视图()函数之前,因为视图()要求调用张量是连续的。

可以通过is_contiguous查看张量内存是否连续。

import 火炬   一个=torch.tensor ([[[1, 2, 3], [4、8、12]], [[1, 2, 3], [4、8、12]]])   打印(a.is_contiguous),   打印(a.contiguous () .view (4,3))

输出:

& lt; built-in  method  is_contiguous  of  Tensor  object  at  0 x7f4b5e35afa0>   张量([[,1,,2,,3],   ,,,(,4,8日,12),   (,,,,1,,2,,3],   ,,,(,4,8日,12]])

在Pytorch中如何使用连续的