【PyTorch】关于张量的连续性(contiguous)

这篇具有很好参考价值的文章主要介绍了【PyTorch】关于张量的连续性(contiguous)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引入:view和reshape有什么区别

view返回的是视图,而reshape一般返回拷贝(取决于原始张量的存储方式)

视图:共享底层数据

view只能用于满足连续性张量的视图

问题1:什么叫满足连续性的张量

连续性条件的含义是,张量底层一维数组元素的存储顺序与张量按行优先一维展开的元素顺序是否一致。

>>> x = torch.arange(12).reshape(3,4)
>>> x
tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]])

这个张量是连续的,因为它的底层数据的存储顺序是[0, 1, 2, … , 11],与它按行优先一维展开的顺序相同。

问题2:如何判断一个张量是否满足连续性条件

  1. y.is_contiguous()True说明连续

  2. y.stride(),如果stride与y的形状不匹配,说明不连续

    例如

    >>> x = torch.arange(6).reshape(2,3)
    >>> x
    tensor([[0, 1, 2],
            [3, 4, 5]])
    >>> x.stride()
    (3, 1)
    >>> y = x.transpose(0,1)  # 转置之后不再满足连续性
    >>> y
    tensor([[0, 3],
            [1, 4],
            [2, 5]])
    >>> y.is_contiguous()
    False
    >>> y.stride()
    (1, 3)
    

    y按行展开的stride应该是(2, 1),所以y不连续(不满足问题1)

问题3:为什么有些操作需要连续的张量

因为有些操作在底层实现的时候,需要按照一定的顺序访问或修改张量的元素,而不连续的张量会导致这些操作变得复杂或低效。

回到引入,为什么view只能用于满足连续性张量的视图?

因为它的作用是在不改变底层数据的情况下,使用新的形状查看张量。如果张量不是连续的,那么它的底层数据的存储顺序与它按行优先一维展开的顺序不同,这样就无法用一个新的步长来实现形状的变化

方法1:不连续的张量转成连续张量

接着上一个代码段,调用contiguous()函数即可

>>> z = y.contiguous()  # 将不连续张量y转成连续张量
>>> z
tensor([[0, 3],
        [1, 4],
        [2, 5]])
>>> z.is_contiguous()  # z连续
True
>>> z.stride()
(2, 1)

问题4:为什么reshape可能会返回一个视图或者一个拷贝

reshape 会根据原始张量的内存布局来决定是否可以通过修改步长来实现形状的变化,如果可以,返回视图,否则返回拷贝

仍以上面的y为例,下面是返回拷贝的情况文章来源地址https://www.toymoban.com/news/detail-490406.html

>>> y
tensor([[0, 3],
        [1, 4],
        [2, 5]])
>>> y.is_contiguous()  # y不连续
False
>>> z = y.reshape(2, 3)  # 返回拷贝
>>> z
tensor([[0, 3, 1],
        [4, 2, 5]])
>>> z.is_contiguous()  # z连续
True
>>> y.stride()  # y不连续
(1, 3)
>>> z.stride()  # z连续
(3, 1)

到了这里,关于【PyTorch】关于张量的连续性(contiguous)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2.3 连续性随机变量

      我会按照以下步骤学习连续型随机变量: 复习概率论的基础知识,包括概率、期望、方差等概念和公式,以及离散型随机变量的概率分布函数和概率质量函数的概念和性质。 学习连续型随机变量的概念和性质,包括概率密度函数、累积分布函数、期望、方差等基本概念和

    2023年04月27日
    浏览(40)
  • 第3章 业务连续性计划

    业务连续性计划(Business Continuity Plan, BCP): 用于在紧急情况下维持业务的连续运营。目标是通过策略、程序、流程将潜在的破坏性事件对业务的影响降至最低。 组织中的每个人, 都应接收业务连续性计划的基本意识培训。 具有特定角色的人员 ,例如急救人员和高级管理人员

    2024年02月08日
    浏览(36)
  • 业务连续性对于软件来说有哪些作用?

    随着信息技术的快速发展,软件已经成为了现代企业的核心基础设施之一。然而,由于各种原因,软件系统在使用过程中出现问题的可能性是存在的。因此,保证软件系统的业务连续性变得至关重要,那业务连续性对于软件来说有哪些作用?   首先,业务连续性可以确保软件

    2024年02月08日
    浏览(47)
  • 信息安全管理(CISP)—— 业务连续性

    业务连续性主要分为三个模块:业务连续性管理、信息安全应急响应、灾备与恢复 业务连续性管理基础 业务连续性(BC):组织对事故和业务中断的规划和响应,使业务可能在预先定义的级别上持续运行的的组织策略和战术上的能力。 业务连续性管理(BCM): 找出组织有潜

    2024年02月09日
    浏览(39)
  • FLUENT连续性方程不收敛&FLUENT求解器设置

    continuity不收敛的问题 连续性方程不收敛是怎么回事? 正在学习Fluent,模拟圆管内的流动,速度入口,出口outflow运行后xy的速度很快就到1e-06了,但是continuity老是降不下去,维持在1e-00和1e-03之间,减小松弛因子好像也没什么变化大家有什么建议吗? 当连续性不收敛的时候,做

    2024年02月08日
    浏览(55)
  • java对时间序列根据阈值进行连续性分片

    问题描述:我需要对一个连续的时间戳list进行分片,分片规则是下一个数据比当前数据要大于某一个阈值则进行分片; 解决方式: 1、输入的有顺序的list ,和需要进行分片的阈值 2、调用方法,填入该排序的list和阈值 检验: 结果:(应该是成功了)

    2024年02月10日
    浏览(40)
  • 优化|一阶方法:求解不具有凸性和lipschitz连续性的复合问题

    论文解读者:陈康明,赵田田,李朋 对于大多数一阶算法,我们会在收敛性分析时假设函数是凸的,且梯度满足全局 Lipschitz 条件。而本文中,对于某一类特殊函数。我们不仅不要求函数是凸的,也不再要求梯度满足全局 Lipschitz 条件。 考虑复合优化问题 ( P ) min ⁡ { Ψ ( x

    2024年02月12日
    浏览(48)
  • 必学AI绘图技巧,如何用Midjourney实现连续性人物的创作,SEED功能

    经常使用Midjourney的朋友可能都知道,尽管最新的Midjourney V5版本可以通过自然的语言描述创作出高质量的绘画作品,但却有很大的随机性,即使你输入同样的命令,Midjourney每次输出的结果都会不一样。 下面介绍一下以人物画像为例,我们需要保证输出的人物面容保持一致性,

    2024年02月15日
    浏览(78)
  • 【五一创作】【Midjourney】Midjourney 连续性人物创作 ① ( 通过垫图方式生成类似图像 )

    Midjourney 可以生成高质量的图像 , 但是 生成过程有很大的随机性 , 输入同样的提示词指令 , 其输出结果也存在很大的不同 ; 如果要 生成稳定的人物角色 , 场景 , 描述连贯的内容 , 这就要求生成的内容不能太随机 ; 如 : 设置稳定的人物样貌 , 生成相同样貌的人物 , 不同的动作

    2024年02月02日
    浏览(49)
  • 【Midjourney】Midjourney 连续性人物创作 ③ ( Panels 命令 | character sheet 命令 | expression sheet 命令 )

    公式 : 6 panels with different poses ; 生成指定数量的图片 : 上面的指令作用是 生成 6 张不同动作的 8k 图片 ; 公式 : 6 panels with continuous + 动作 ; 生成指定数量指定动作的连续图片 : 上面的指令作用是 生成 6 张跑动动作的连续图片 ; 首先 , 输入 /setting 命令 , 将生成模式切换成 Niji

    2024年02月09日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包