深度实践OpenStack:基于Python的OpenStack组件开发—3.1.2 PyTorch里的张量

举报
华章计算机 发表于 2019/06/01 22:50:49 2019/06/01
【摘要】 本书摘自《深度实践OpenStack》,作者是喻涛,田亮,张家龙,赵利军,李飞。

3.1.2 PyTorch里的张量

  在扩展库PyTorch中,张量是运算的基本数据类型,用类torch.Tensor实现。在正式介绍torch.Tensor类的用法之前,本节先来看一段使用torch.Tensor类的代码,使你对PyTorch里的张量有个直观的印象。

  代码清单3-1是一段使用torch.Tensor类的代码。该代码首先导入了扩展库PyTorch。扩展库PyTorch在Python里记作“torch”,可以用语句“import torch”导入。接着,代码用torch.tensor() 函数将一个列表转化为torch.Tensor类实例t2。注意,函数名tensor的所有字母都是小写字母,而类名的首字母是大写的。得到torch.Tensor类实例t2后,代码显示t2的数据内容。接着,代码还将张量t2的元素进行重新组织,使得其大小从变为。最后,代码演示了如何利用张量进行数学计算,将张量逐元素加1得到新的张量。

代码清单3-1 一段使用torch.Tensor类的代码

     import torch

     t2 = torch.tensor([[0, 1, 2], [3, 4, 5]])

     print(t2)

     print('数据 = {}'.format(t2))

     print(t2.reshape(3, 2)) # 重新组织元素

     print(t2 + 1) # 逐元素运算

  代码清单3-1涉及张量的构造、元素重组、科学计算等用法。在本章后续内容中,我们将逐一对以上话题进行介绍。

  前一节提到了张量的大小、维度和元素个数。在PyTorch中,可以通过torch.Tensor类实例的成员获得这些性质。torch.Tensor类包括以下成员(但不限于此)。

* 成员size():返回张量的大小,它是一个元组的子类torch.Size类实例。

* 成员dim():返回张量的维度,它是一个int类型的数值。它是张量大小的数据条目个数。

* 成员numel():张量中元素的个数,它是一个int类型的数值。它是张量大小各条目之积。

  例如,可以用以下代码查看代码清单3-1中张量t2的数据、大小、维度和元素个数:

     print('数据 = {}'.format(t2))

     print('大小 = {}'.format(t2.size()))

     print('维度 = {}'.format(t2.dim()))

     print('元素个数 = {}'.format(t2.numel()))

  在代码清单3-1中,张量类实例t2的大小为,维度为2,元素个数为6。

  另外,每个张量类实例还会有元素类型(dtype)。为了更好地适应不同的应用需求,PyTorch提供了下列元素类型。

* 浮点类型:torch.float16、torch.float32、torch.float64。它们的区别在于位数和精度不同。类型名称的后缀“16”“32”“64”表示位数,位数越大精度越高。这些浮点类型中最常用的是torch.float32。

* 整数类型:torch.uint8、torch.int8、torch.int16、torch.int32、torch.int64。其中torch.uint8是无符号(unsigned)的整数类型,它只能表示非负整数;其他整数类型都是有符号类型。这些整数类型中最常用torch.int64类型表示指标(即0、1、2这样的序号),用torch.uint8表示逻辑类型(即“是”或“否”)。

  可以通过张量类实例的成员dtype查看元素类型:

     print('元素类型 = {}'.format(t2.dtype))

  代码清单3-1在构造torch.Tensor类实例时,使用了int值列表,所以构造出来的张量的数据类型默认为torch.int64型。如果用bool值列表构造,则构造出来的张量元素类型默认是torch.uint8型;如果用float值列表构造,则构造出来的张量的元素类型默认是torch.float32型。



【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。