前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PyTorch入门笔记-创建序列张量

PyTorch入门笔记-创建序列张量

作者头像
触摸壹缕阳光
发布2020-12-02 12:14:44
2.8K0
发布2020-12-02 12:14:44
举报

创建序列张量

在循环计算或者对张量进行索引时,经常需要创建一段连续的整型或浮点型的序列张量。PyTorch 提供了一些能够创建序列张量的方法。

创建整型序列:

  • torch.arange(start = 0, end, step = 1, out = None, layout = torch.strided, device = None, requires_grad = False) 可以创建长度为
\lceil \frac{end - start}{step} \rceil

(

\lceil \rceil

为向上取整,返回大于或者等于表达式的最小整数) 的 1D 张量,张量的元素值为在 [start, end) 之间,步长为 step 的整型序列,不包含 end 本身;

  • torch.range(start = 0, end, step = 1, out = None, layout = torch.strided, device = None, requires_grad = False) 可以创建长度为
\lfloor \frac{end - start}{step} \rfloor + 1

(

\lfloor \rfloor

为向下取整,返回小于或者等于表达式的最大整数) 的 1D 张量,张量的元素值为在 [start, end] 之间,步长为 step 的整型序列,包含 end 本身;

使用 torch.range() 函数会出现 Warning 警告:未来的 Pytorch 版本会将 torch.range() 函数丢弃。因为 torch.range() 函数和 Python 的内建函数 range 行为不一致,Python 中的 range 函数生成的整数序列范围为 [start, end) (包左不包右,Python中习惯使用包左不包右的规范),而 torch.range() 函数生成的整数序列范围为 [start, end] (包左包右)。

torch.arange() 函数和 torch.range() 函数功能相似。「如果想要创建整型序列,推荐使用 torch.arange() 函数。」

代码语言:javascript
复制
>>> import torch
>>> # 创建元素值为范围[0, 10)步长为1的1D整数序列张量
>>> a = torch.arange(0, 10)
>>> print(a)
tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

>>> # 创建元素值为范围[1, 10)步长为2的1D整数序列张量
>>> b = torch.arange(1, 10, 2)
>>> print(b)
tensor([1, 3, 5, 7, 9])

>>> # 使用torch.range()函数创建元素值为范围[0, 10)步长为1的1D整数序列张量
>>> c = torch.range(0, 10)
>>> print(c)
tensor([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])
/home/chenkc/code/create_tensor.py:298: UserWarning: torch.range is deprecated in favor of torch.arange and will be removed in 0.5. Note that arange generates values in [start; end), not [start; end].
  c = torch.range(0, 10)

对于张量 b 来说,由于

\lceil \frac{10 - 1}{2} = 4.5 \rceil = 5

,因此最终张量 b 为长度为 5 的 1D 张量。

创建浮点型序列:

  • torch.linspace(start, end, steps, out = None, dtype = None, layout = torch.strided, device = None, requires_grad = False) 可以创建长度为 steps 的 1D 张量,张量的元素值为在 [start, end] 之间均匀间隔的 steps 个点。序列张量的值为
(start, start + \frac{end - start}{steps}, ..., start + (steps - 1) * \frac{end - start}{steps}, end)

  • torch.logspace(start, end, steps, base = 10.0, out = None, layout = torch.strided, device = None, requires_grad = False) 可以创建长度为 steps 的 1D 张量,张量的元素值为在
[base^{start}, base^{end}]

之间均匀间隔的 steps 个点。序列张量的值为

(base^{start}, bast^{(start + \frac{end - start}{steps})}, ..., base^{(start + (step - 1)*\frac{end - start}{steps})}, base^{end})

代码语言:javascript
复制
>>> import torch
>>> # 创建元素值为范围[0, 10]之间均匀间隔的5个值的1D浮点型序列张量
>>> a = torch.linspace(0., 10., 5)
>>> print(a)
tensor([ 0.0000,  2.5000,  5.0000,  7.5000, 10.0000])

>>> # 创建元素值为范围[10^0, 10^10]之间均匀间隔的5个值的1D浮点型序列张量
>>> b = torch.logspace(0., 10., 5)
>>> print(b)
tensor([1.0000e+00, 3.1623e+02, 1.0000e+05, 3.1623e+07, 1.0000e+10])

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI机器学习与深度学习算法 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建序列张量
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档