返回顶部
首页 > 资讯 > 后端开发 > Python >【深度学习笔记】彻底理解torch中的tensor与numpy中array区别及用法
  • 453
分享到

【深度学习笔记】彻底理解torch中的tensor与numpy中array区别及用法

深度学习numpypythonpytorchtensorflow 2023-10-11 11:10:04 453人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

文章目录 前言一、先搞懂Torch中的tensor与Tensor二、torch.tensor()的用处及数据特点三、np.array()与torch.tensor()比较三、np.array(

文章目录


前言

刚接触深度学习的同学,很多开源项目代码中,张量tensor数组array都有使用,不清楚两者有什么区别,以及怎么使用,如何相互转换等。博主起初也有类似的疑惑,经过查阅资料以及实践,逐渐有了深入了解,本文将记录并分享自己对两者的理解,可供参考。

提示:以下是本篇文章正文内容,下面案例可供参考

一、先搞懂Torch中的tensor与Tensor

torch.Tensor()也就是torch.FloatTensor()的另一种简写,torch.Tensor()会生成**单精度浮点类型(32位)**的张量,如下所示:

#使用torch.FloatTensor()定义一个张量,查看类型>>> import torch>>> I = torch.Tensor([2, 3])tensor([2., 3.])>>> I.type()'torch.FloatTensor'>>>

与torch.Tensor()同级类似的还有torch.IntTensor(),torch.LongTensor(),torch.DoubleTensor(),分别为短整型、长整型、双精度浮点型(64位)。
torch.tensor()中的数据类型决定生成张量的类型,如下所示:

>>> I = torch.tensor([2, 3])>>> I.type()'torch.LongTensor'>>>>>> I = torch.tensor([1., 2.])>>> I.type()'torch.FloatTensor' >>>  

可以通过torch.set_default_tensor_type(t)设置默认的tensor类型,如要使用torch.tensor()建立一个双精度浮点类型的张量,如下所示:

>>> torch.set_default_tensor_type(torch.DoubleTensor)  #指定默认类型>>> torch.tensor([1.2, 3]).dtype  torch.float64

二、torch.tensor()的用处及数据特点

在深度学习PyTorch框架中,torch.tensor是存储和变换数据的重要工具。在torch中,为tensor计算提供了GPU加速、梯度自动求导等功能,这使得深度学习这种拥有庞大计算量的工程提高了计算效率,可以说torch.tensor专为深度学习设计的。

三、np.array()与torch.tensor()比较

numpy产生的数组类型为numpy.ndarray,
1、与torch.tensor()不同,另外打印数组类型的方式也有区别,umpy中没有x.type()的用法,只能使用type(x);
2、numpy.ndarray类型的数据只能放在cpu中计算,而tensor可以放在GPU计算,也可以CPU计算。如下所示:

>>> import numpy as np>>> A = np.array([[1, 2], [2, 4]])>>> Aarray([[1, 2],       [2, 4]])>>> type(A)<class 'numpy.ndarray'>>>>

Pytorch中的Tensor又包括CPU上的数据类型和GPU上的数据类型,两种数据类型之间也可以进行相互转换。

三、np.array()与torch.tensor()相互转换

训练时,我们需要先把图像数据读取转换为np.array()类型的数组,然后把np.array()转换为torch.tensor,用于深度学习训练加速。我们使用**numpy()和from_numpy()**将Tensor和NumPy中的数组相互转换。
注意这两个函数所产生的的Tensor和NumPy中的数组共享相同的内存(所以他们之间的转换很快),改变其中一个时另一个也会改变,

还有一个常用的将NumPy中的array转换成Tensor的方法就是torch.tensor(), 需要注意的是,此方法总是会进行数据拷贝(就会消耗更多的时间和空间),所以返回的Tensor和原来的数据不再共享内存。

1.使用numpy()将Tensor转换成NumPy数组:

代码如下(示例):

>>> a = torch.ones(5)>>> atensor([1., 1., 1., 1., 1.])>>> a.type()'torch.FloatTensor'>>> b = a.numpy()>>> barray([1., 1., 1., 1., 1.], dtype=float32)>>>

2.使用from_numpy()将NumPy数组转换成Tensor:

代码如下(示例):

>>> a = np.ones(5)>>> aarray([1., 1., 1., 1., 1.])>>> type(a)<class 'numpy.ndarray'>>>>>>> b = torch.from_numpy(a)>>> btensor([1., 1., 1., 1., 1.], dtype=torch.float64)>>>

3.直接使用torch.tensor()将NumPy数组转换成Tensor:

**注意:该方法总是会进行数据拷贝,返回的Tensor和原来的numpy数据不再共享内存。**验证代码如下:

>>> a = np.ones(5)>>> aarray([1., 1., 1., 1., 1.])>>> type(a)<class 'numpy.ndarray'>>>>>>> b = torch.from_numpy(a)>>> btensor([1., 1., 1., 1., 1.], dtype=torch.float64)>>>>>> c = torch.tensor(a)>>> ctensor([1., 1., 1., 1., 1.], dtype=torch.float64)>>> a += 1>>> aarray([2., 2., 2., 2., 2.])#a的值加1,改变>>> ctensor([1., 1., 1., 1., 1.], dtype=torch.float64)  #c的值未变,因为是拷贝,不共享内存>>> btensor([2., 2., 2., 2., 2.], dtype=torch.float64)#b的值已经改变,与a的值一样,虽然类型不一样>>>

总结

本文主要记录介绍torch.tensor与numpy.array之间的区别,以及应用场景,相互转换的方法,讲述了更多的细节,这些知识点在深度学习模型训练中非常有用,属于基础知识。博主后续会继续更新分享深度学习笔记,记录提炼知识点,总结学习经验及项目经验。如果本文对您的理解有帮助,请点赞+关注+收藏!

来源地址:https://blog.csdn.net/DeepLearning_/article/details/127677006

--结束END--

本文标题: 【深度学习笔记】彻底理解torch中的tensor与numpy中array区别及用法

本文链接: https://lsjlt.com/news/428327.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作