pytorch 损失函数,交叉熵 pytorch
pytorch中的连续()
1 先看看官方中英文doc:
火炬。Tensor.contiguous (Python方法,在torch中。张量)火炬。Tensor.is_contiguous (Python方法,在torch中。张量)
1.1 contiguous() Tensor
返回包含与自张量相同数据的连续张量。如果自张量是连续的,该函数返回自张量。
1.2 contiguous() Tensor
返回一个具有连续记忆和相同数据的张量;如果原张量有连续记忆,则返回原张量;
2 pytorch contiguous的使用
Contiguous一般与transpose、persist、view一起使用:使用transpose或persist变换维度后,调用contiguous,然后使用view变换维度(例如:tensor_var.contiguous()。view()))。例子如下:
X=torch.tensor (2,3) y=x.permate (1,0) # permate:二维张量的量纲变换。这里的函数相当于转置y.view (-1) #来报告一个错误。在使用视图之前,需要调用coherent()函数y=x.permate (1,0
1.经过转置、置换等维度变换操作后,张量不再连续存储在内存中,而视图操作需要张量的内存连续存储,所以需要contiguous返回一个连续的副本;
2维度转换后的变量是前一个变量的浅拷贝,指向同一个区域,即视图操作会和原变量一起变形,这是非法的,所以也会报错;——这个解释有一定道理,就是contiguous返回了张量的contiguous副本数据的深度副本;
3 contiguous函数分析,参考CSDN博客
在pytorch中,不改变张量本身内容的操作只有几个,而是
只是重新定义下标与元素的对应关系
。换句话说,这种操作不进行数据拷贝和数据的改变,变的是元数据
,这些操作是:narrow(),view(),expand(),transpose();举个栗子。用transpose()的时候是
pytorch并不会创建新的、转置后的tensor
,但是修改了tensor中的一些属性(也就是元数据),使得此时的offset和stride是与转置tensor相对应的
,还有转置的tensor和原tensor的内存是共享的
!为了证明这一点,让我们看看下面的代码:
X=torch.randn (3,2) y=x.transpose (x,0,1) x [0,0]=233print (y [0,0]) # print233可以看出