PyTorch中torch.tensor和torch.tensor有什么区别

  介绍

这篇文章主要为大家展示了PyTorch中torch.tensor和torch.tensor有什么区别,内容简而易懂,希望大家可以学习一下,学习完之后肯定会有收获的,下面让小编带大家一起来看看吧。

众所周知,numpy作为Python中数据分析的专业第三方库,比Python自带的数学库速度更快。同样的,在PyTorch中,有一个类似于numpy的库,称为Tensor.Tensor自称为神经网络界的numpy。


对比项numpyTensor相同点可以定义多维数组,进行切片,改变维度、数学运算等可以定义多维数组,进行切片,改变维度、数学运算等不同点

1,产生的数组类型为numpy。ndarray;

2,会将ndarray放入CPU中进行运算;

3,导入方式为进口numpy np,后续通过np.array([1, 2])建立数组;

4, numpy中没有x.type()的用法,只能使用类型(x)。

1,产生的数组类型为火炬。张量;

2,会将张量放入GPU中进行加速运算(如果有GPU);

3,导入方式为进口火炬,后续通过torch.tensor([1, 2])或torch.tensor([1, 2])建立数组;

4张量中查看数组类型既可以使用类型(x),也可以使用x.type()。但是更加推荐采用x.type(),具体原因详见下文。

,举例(以下代码均在Jupyter笔记本上运行且通过):

numpy:

进口numpy np
  x=np.array ([1,2])
  #之所以这么写,是为了告诉大家,在Jupyter笔记本中,是否带有打印()函数打印出来的效果是不一样的~
  x #阵列([1,2])
  打印(x) # (1 2)
  类型(x) # numpy.ndarray
  print(类型(x)) # & lt;类& # 39;numpy.ndarray& # 39;比;
  #注意:numpy中没有x.type()的用法,只能使用类型(x) ! ! ! 

张量:

进口火炬#注意,这里是进口火炬,不是进口张量! ! !
  x=torch.tensor ([1,2])
  x #张量([1,2])
  打印(x) #张量([1,2]),注意,这里与numpy就不一样了!
  
  类型(x) # torch.Tensor
  print(类型(x)) # & lt;类& # 39;torch.Tensor& # 39;比;
  x.type () # & # 39; torch.LongTensor& # 39;,注意:numpy中不可以这么写,会报的错! ! !
  print (x.type ()) # torch.LongTensor,注意:numpy中不可以这么写,会报的错! ! ! 

numpy与张量在使用上还有其他差别。由于不是本文的重点,故暂不详述。后续可能会更新~,,,

,,,,细心的读者可能注意到了,通过张量建立数组有torch.tensor([1, 2])或torch.tensor([1, 2])两种方式。那么,这两种方式有什么区别呢?

,,,,(1)torch.tensor是从数据中推断数据类型,而torch.tensor是torch.empty(会随机产生垃圾数组,详见实例)和torch.tensor之间的一种混合。但是,当传入数据时,torch.tensor使用全局默认dtype (FloatTensor);

,,,,(2)torch.tensor(1)返回一个固定值1,而torch.tensor(1)返回一个大小为1的张量,它是初始化的随机值。

进口火炬#注意,这里是进口火炬,不是进口张量! ! !
  
  x=torch.tensor ([1,2])
  
  x #张量([1,2])
  打印(x) #张量([1,2]),注意,这里与numpy就不一样了!
  类型(x) # torch.Tensor
  print(类型(x)) # & lt;类& # 39;torch.Tensor& # 39;比;
  x.type () # & # 39; torch.LongTensor& # 39;,注意:numpy中不可以这么写,会报的错! ! !
  print (x.type ()) # torch.LongTensor,注意:numpy中不可以这么写,会报的错! ! !
  
  y=torch.Tensor ([1,2])
  
  y #张量([1。2 .]),因为torch.Tensor使用全局默认dtype (FloatTensor)
  打印(y) #张量([1。2 .]),因为torch.Tensor使用全局默认dtype (FloatTensor)
  类型(y) # torch.Tensor
  print(类型(y)) # & lt;类& # 39;torch.Tensor& # 39;比;
  y.type () # & # 39; torch.FloatTensor& # 39;,注意:这里就与上面不一样了!张量→LongTensor,张量→FloatTensor ! ! !
  print (y.type ()) # torch.FloatTensor,注意:这里就与上面不一样了!张量→LongTensor,张量→FloatTensor ! ! !
  
  z=torch.empty ([1,2])
  
  z #随机运行两次,结果不同:张量([[0。,0。]]),张量([[1.4013 e-45, 0.0000 e + 00]])
  打印(z) #随机运行两次,结果不同:张量([[0。,0。]]),张量([[1.4013 e-45, 0.0000 e + 00]])
  类型(z) # torch.Tensor
  print(类型(z)) # & lt;类& # 39;torch.Tensor& # 39;比;
  z.type () # & # 39; torch.FloatTensor& # 39;,注意:空()默认为torch.FloatTensor而不是torch.LongTensor
  print (z.type ()) # torch.FloatTensor,注意:空()默认为torch.FloatTensor而不是torch.LongTensor
  
  # torch.tensor (1) torch.tensor(1)和torch.empty(1)的对比:
  t1=torch.tensor (1)
  t2=torch.Tensor (1)
  t3=torch.empty (1)
  
  t1 #张量(1)
  打印(t1) #张量(1)
  类型(t1) # torch.Tensor
  print(类型(t1) # & lt;类& # 39;torch.Tensor& # 39;比;
  t1.type () # & # 39; torch.LongTenso& # 39;
  # torch.LongTensor打印(t1.type ())
  
  t2 #随机运行两次,结果不同:张量([2.8026 e-45]),张量([0])
  打印(t2) #随机运行两次,结果不同:张量([2.8026 e-45]),张量([0])
  类型(t2) # torch.Tensor
  print(类型(t2)) # & lt;类& # 39;torch.Tensor& # 39;比;
  t2.type () # & # 39; torch.FloatTensor& # 39;
  # torch.FloatTensor打印(t2.type ())
  
  t3 #随机运行两次,结果不同:张量([0]),张量([1.4013 e-45])
  打印(t3) #随机运行两次,结果不同:张量([0]),张量([1.4013 e-45])
  类型(t3) # torch.Tensor
  print(类型(t3)) # & lt;类& # 39;torch.Tensor& # 39;比;
  t3.type () # & # 39; torch.FloatTensor& # 39;
  print (t3.type ()) # torch.FloatTensor 

PyTorch中torch.tensor和torch.tensor有什么区别