PyTorch中torch.tensor与torch.Tensor的区别详解


Posted in Python onMay 18, 2020

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

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

一、numpy和Tensor二者对比

对比项 numpy Tensor
相同点 可以定义多维数组,进行切片、改变维度、数学运算等 可以定义多维数组,进行切片、改变维度、数学运算等
不同点 1、产生的数组类型为numpy.ndarray; 2、会将ndarray放入CPU中进行运算; 3、导入方式为import numpy as np,后续通过np.array([1,2])建立数组; 4、numpy中没有x.type()的用法,只能使用type(x)。 1、产生的数组类型为torch.Tensor; 2、会将tensor放入GPU中进行加速运算(如果有GPU); 3、导入方式为import torch,后续通过torch.tensor([1,2])或torch.Tensor([1,2])建立数组; 4、Tensor中查看数组类型既可以使用type(x),也可以使用x.type()。但是更加推荐采用x.type(),具体原因详见下文。

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

numpy:

import numpy as np 
x = np.array([1,2]) 
#之所以这么写,是为了告诉大家,在Jupyter Notebook中,是否带有print()函数打印出来的效果是不一样的~ 
x       #array([1, 2])
print(x)     #[1 2]
type(x)     #numpy.ndarray
print(type(x))   #<class 'numpy.ndarray'>
#注意:numpy中没有x.type()的用法,只能使用type(x)!!!

Tensor:

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

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

二、torch.tensor与torch.Tensor的区别

        细心的读者可能注意到了,通过Tensor建立数组有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的张量,它是初始化的随机值。

import torch    #注意,这里是import torch,不是import Tensor!!!
 
x = torch.tensor([1,2])
 
x       #tensor([1, 2])
print(x)     #tensor([1, 2]),注意,这里与numpy就不一样了!
type(x)     #torch.Tensor
print(type(x))    #<class 'torch.Tensor'>
x.type()     #'torch.LongTensor',注意:numpy中不可以这么写,会报错!!!
print(x.type())   #torch.LongTensor,注意:numpy中不可以这么写,会报错!!!
 
y = torch.Tensor([1,2])
 
y       #tensor([1., 2.]),因为torch.Tensor使用全局默认dtype(FloatTensor)
print(y)     #tensor([1., 2.]),因为torch.Tensor使用全局默认dtype(FloatTensor)
type(y)     #torch.Tensor
print(type(y))    #<class 'torch.Tensor'>
y.type()     #'torch.FloatTensor',注意:这里就与上面不一样了!tensor->LongTensor,Tensor->FloatTensor!!!
print(y.type())   #torch.FloatTensor,注意:这里就与上面不一样了!tensor->LongTensor,Tensor->FloatTensor!!!
 
z = torch.empty([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)     #torch.Tensor
print(type(z))    #<class 'torch.Tensor'>
z.type()     #'torch.FloatTensor',注意:empty()默认为torch.FloatTensor而不是torch.LongTensor
print(z.type())   #torch.FloatTensor,注意:empty()默认为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       #tensor(1)
print(t1)     #tensor(1)
type(t1)     #torch.Tensor
print(type(t1))   #<class 'torch.Tensor'>
t1.type()     #'torch.LongTenso'
print(t1.type())   #torch.LongTensor
 
t2       #随机运行两次,结果不同:tensor([2.8026e-45]),tensor([0.])
print(t2)     #随机运行两次,结果不同:tensor([2.8026e-45]),tensor([0.])
type(t2)     #torch.Tensor
print(type(t2))   #<class 'torch.Tensor'>
t2.type()     #'torch.FloatTensor'
print(t2.type())   #torch.FloatTensor
 
t3       #随机运行两次,结果不同:tensor([0.]),tensor([1.4013e-45])
print(t3)     #随机运行两次,结果不同:tensor([0.]),tensor([1.4013e-45])
type(t3)     #torch.Tensor
print(type(t3))   #<class 'torch.Tensor'>
t3.type()     #'torch.FloatTensor'
print(t3.type())   #torch.FloatTensor

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

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

到此这篇关于PyTorch中torch.tensor与torch.Tensor的区别详解的文章就介绍到这了,更多相关PyTorch中torch.tensor与torch.Tensor内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python内建数据结构详解
Feb 03 Python
python函数中return后的语句一定不会执行吗?
Jul 06 Python
Python实现登录接口的示例代码
Jul 21 Python
python数字图像处理实现直方图与均衡化
May 04 Python
python基于http下载视频或音频
Jun 20 Python
Python使用pyautogui模块实现自动化鼠标和键盘操作示例
Sep 04 Python
Python正则表达式和re库知识点总结
Feb 11 Python
Pandas时间序列基础详解(转换,索引,切片)
Feb 26 Python
Django Model中字段(field)的各种选项说明
May 19 Python
Matplotlib中%matplotlib inline如何使用
Jul 28 Python
python 浮点数四舍五入需要注意的地方
Aug 18 Python
教你漂亮打印Pandas DataFrames和Series
May 29 Python
django queryset相加和筛选教程
May 18 #Python
python中JWT用户认证的实现
May 18 #Python
python 实现读取csv数据,分类求和 再写进 csv
May 18 #Python
python 实现分组求和与分组累加求和代码
May 18 #Python
Django ORM实现按天获取数据去重求和例子
May 18 #Python
如何实现更换Jupyter Notebook内核Python版本
May 18 #Python
python mysql自增字段AUTO_INCREMENT值的修改方式
May 18 #Python
You might like
PHP数据库调用类调用实例(详细注释)
2012/07/12 PHP
PHP读取文件内容后清空文件示例代码
2014/03/18 PHP
使用GDB调试PHP代码,解决PHP代码死循环问题
2015/03/02 PHP
php使用指定字符列表生成随机字符串的方法
2015/04/18 PHP
如何在centos8自定义目录安装php7.3
2019/11/28 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
硬盘浏览程序,保存成网页格式便可使用
2006/12/03 Javascript
Jquery调用webService远程访问出错的解决方法
2010/05/21 Javascript
Jquery下attr和removeAttr的使用方法
2010/12/28 Javascript
网页防止tab键的使用快速解决方法
2013/11/07 Javascript
jQuery实现级联菜单效果(仿淘宝首页菜单动画)
2014/04/10 Javascript
JavaScript学习笔记之检测客户端类型是(引擎、浏览器、平台、操作系统、移动设备)
2015/12/03 Javascript
详解JavaScript的Date对象(制作简易钟表)
2020/04/07 Javascript
微信小程序 wx.request(OBJECT)发起请求详解
2016/10/13 Javascript
详解windows下vue-cli及webpack 构建网站(二)导入bootstrap样式
2017/06/17 Javascript
使用Layui搭建后台管理界面的操作方法
2019/09/20 Javascript
vue3.0+vue-router+element-plus初实践
2020/12/02 Vue.js
Python中比较特别的除法运算和幂运算介绍
2015/04/05 Python
Python3.x对JSON的一些操作示例
2017/09/01 Python
django之session与分页(实例讲解)
2017/11/13 Python
Python利用字典将两个通讯录文本合并为一个文本实例
2018/01/16 Python
python爬取各类文档方法归类汇总
2018/03/22 Python
Pycharm设置去除显示的波浪线方法
2018/10/28 Python
利用Pyhton中的requests包进行网页访问测试的方法
2018/12/26 Python
在Mac中PyCharm配置python Anaconda环境过程图解
2020/03/11 Python
python使用for...else跳出双层嵌套循环的方法实例
2020/05/17 Python
HTML5 canvas基本绘图之绘制线条
2016/06/27 HTML / CSS
网络技术支持面试题
2013/04/22 面试题
MYSQL基础面试题
2012/05/13 面试题
婚前协议书怎么写
2014/04/15 职场文书
计算机系统管理员求职信
2014/06/20 职场文书
网吧消防安全责任书
2014/07/29 职场文书
领导干部个人对照检查材料(群众路线)
2014/09/26 职场文书
导师对论文的学术评语
2015/01/04 职场文书
应聘教师求职信范文
2015/03/20 职场文书
施工单位工程部经理岗位职责
2015/04/09 职场文书