PyTorch中与的区别

时间:2025-02-11 14:41:21

        PyTorch最近几年可谓大火。相比于TensorFlow,PyTorch对于Python初学者更为友好,更易上手。

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

一、numpy和Tensor二者对比

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

1、产生的数组类型为;

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

3、导入方式为import numpy as np,后续通过([1,2])建立数组;

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

1、产生的数组类型为;

2、会将tensor放入GPU中进行加速运算(如果有GPU);

3、导入方式为import torch,后续通过([1,2])或([1,2])建立数组;

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

举例(以下代码均在Jupyter Notebook上运行且通过):

numpy

import numpy as np

x = ([1,2])

#之所以这么写,是为了告诉大家,在Jupyter Notebook中,是否带有print()函数打印出来的效果是不一样的~

x                         #array([1, 2])
print(x)                  #[1 2]

type(x)                   #
print(type(x))            #<class ''>

#注意:numpy中没有()的用法,只能使用type(x)!!!

Tensor

import torch               #注意,这里是import torch,不是import Tensor!!!

x = ([1,2])

x                          #tensor([1, 2])
print(x)                   #tensor([1, 2]),注意,这里与numpy就不一样了!

type(x)                    #
print(type(x))             #<class ''>
()                   #'',注意:numpy中不可以这么写,会报错!!!
print(())            #,注意:numpy中不可以这么写,会报错!!!

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

二、与的区别

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

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

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

import torch               #注意,这里是import torch,不是import Tensor!!!

x = ([1,2])

x                          #tensor([1, 2])
print(x)                   #tensor([1, 2]),注意,这里与numpy就不一样了!
type(x)                    #
print(type(x))             #<class ''>
()                   #'',注意:numpy中不可以这么写,会报错!!!
print(())            #,注意:numpy中不可以这么写,会报错!!!

y = ([1,2])

y                          #tensor([1., 2.]),因为使用全局默认dtype(FloatTensor)
print(y)                   #tensor([1., 2.]),因为使用全局默认dtype(FloatTensor)
type(y)                    #
print(type(y))             #<class ''>
()                   #'',注意:这里就与上面不一样了!tensor->LongTensor,Tensor->FloatTensor!!!
print(())            #,注意:这里就与上面不一样了!tensor->LongTensor,Tensor->FloatTensor!!!

z = ([1,2])  
   
z                          #随机运行两次,结果不同:tensor([[0., 0.]]),tensor([[1.4013e-45, 0.0000e+00]])
print(z)                   #随机运行两次,结果不同:tensor([[0., 0.]]),tensor([[1.4013e-45, 0.0000e+00]])
type(z)                    #
print(type(z))             #<class ''>
()                   #'',注意:empty()默认为而不是
print(())            #,注意:empty()默认为而不是

#(1)、(1)和(1)的对比:
t1 = (1)
t2 = (1)
t3 = (1)

t1                         #tensor(1)
print(t1)                  #tensor(1)
type(t1)                   #
print(type(t1))            #<class ''>
()                  #''
print(())           #

t2                         #随机运行两次,结果不同:tensor([2.8026e-45]),tensor([0.])
print(t2)                  #随机运行两次,结果不同:tensor([2.8026e-45]),tensor([0.])
type(t2)                   #
print(type(t2))            #<class ''>
()                  #''
print(())           #

t3                         #随机运行两次,结果不同:tensor([0.]),tensor([1.4013e-45])
print(t3)                  #随机运行两次,结果不同:tensor([0.]),tensor([1.4013e-45])
type(t3)                   #
print(type(t3))            #<class ''>
()                  #''
print(())           #

        上文提到过,对于Tensor,更推荐采用()来查看数据类型。是因为()的输出结果为''或'',可以看出两个数组的种类区别。而采用type(x),则清一色的输出结果都是,无法体现类型区别。

        PyTorch是个神奇的工具,其中的Tensor用法要远比numpy丰富。大家可以在练习中多多总结,逐渐提高~

        加油~!