张量的连续性、contiguous函数

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

        在pytorch中,tensor的实际数据以一维数组(storage)的形式存储于某个连续的内存中,“行优先”进行存储。

tensor的连续性

         tensor连续(contiguous)是指tensor的storage元素排列顺序与其按行优先时的元素排列顺序相同。如下图所示:

张量的连续性、contiguous函数,pytorch基本知识,pytorch,python

        上图中,tensor b是tensor a经过转置而来的,即使用了 tensor.t() 方法。

        出现不连续现象,本质上是由于pytorch中不同tensor可能共用同一个storage导致的。
    pytorch的很多操作都会导致tensor不连续,如tensor.transpose()(tensor.t())、tensor.narrow()、tensor.expand()。
        以转置为例,因为转置操作前后共用同一个storage,但显然转置后的tensor按照行优先排列成1维后与原storage不同了,因此转置后结果属于不连续(见下例)。

2. tensor.is_contiguous()

   is_contiguous直观的解释是Tensor底层一维数组元素的存储顺序与Tensor按行优先一维展开的元素顺序是否一致

        如果想要变得连续使用contiguous方法,如果Tensor不是连续的,则会重新开辟一块内存空间保证数据是在内存中是连续的;如果Tensor是连续的,则contiguous无操作。

        tensor.is_contiguous()用于判断tensor是否连续,以转置为例说明:

import torch
a = torch.tensor([[1, 2, 3],
                  [4, 5, 6],
                  [7, 8, 9]])
print(a)
print(a.storage())
print(a.is_contiguous())  # a是连续的
"""
tensor([[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]])
 1
 2
 3
 4
 5
 6
 7
 8
 9
[torch.LongStorage of size 9]
True
"""

b = a.t()  # b是a的转置
print(b)
print(b.storage())
print(b.is_contiguous())  # b是不连续的
"""
tensor([[1, 4, 7],
        [2, 5, 8],
        [3, 6, 9]])
 1
 2
 3
 4
 5
 6
 7
 8
 9
[torch.LongStorage of size 9]
False
"""

3. tensor不连续的后果

        tensor不连续会导致某些操作无法进行,比如view()就无法进行。在上面的例子中:由于 b 是不连续的,所以对其进行view()操作会报错;b.view(3,3)没报错,因为b本身的shape就是(3,3)。

print(b.view(3, 3))
"""
tensor([[1, 4, 7],
        [2, 5, 8],
        [3, 6, 9]])
"""
print(b.view(1, 9))# 报错
print(b.view(-1))# 报错

 4. tensor.contiguous()


        tensor.contiguous()返回一个与原始tensor有相同元素的 “连续”tensor,如果原始tensor本身就是连续的,则返回原始tensor。
        注意:tensor.contiguous()函数不会对原始数据做任何修改,他不仅返回一个新tensor,还为这个新tensor创建了一个新的storage,在这个storage上,该新的tensor是连续的。
继续使用上面的例子:

c = b.contiguous()
print(b)
print(c)
print(b.storage())
print(c.storage())

 输出结果:

# b
tensor([[1, 4, 7],
        [2, 5, 8],
        [3, 6, 9]])
# c
tensor([[1, 4, 7],
        [2, 5, 8],
        [3, 6, 9]])
# b.storage
 1
 2
 3
 4
 5
 6
 7
 8
 9
[torch.LongStorage of size 9]

#c.storage 
 1
 4
 7
 2
 5
 8
 3
 6
 9
[torch.LongStorage of size 9]

接着运行如下代码: 

print(b.is_contiguous()) # False
print(c.is_contiguous()) # True
print(c.view(1, 9)) # tensor([[1, 4, 7, 2, 5, 8, 3, 6, 9]])


参考自:https://blog.csdn.net/baidu_41774120/article/details/128666944文章来源地址https://www.toymoban.com/news/detail-706542.html

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

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

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

相关文章

  • 2.3 连续性随机变量

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

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

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

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

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

    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日
    浏览(49)
  • 必学AI绘图技巧,如何用Midjourney实现连续性人物的创作,SEED功能

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

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

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

    2024年02月02日
    浏览(49)
  • 【GEMM预备工作】行主序和列主序矩阵的内存中的连续性,解决理解问题

    在内存存储中,默认矩阵是按照行优先储存的,即矩阵的每一列在内存中是连续的。行优先矩阵储存中行数据是不连续的。 而对于列主序的矩阵,是按照列优先储存的,即矩阵的每一行在内存中是连续的。列优先矩阵储存中列数据是不连续的:  

    2024年02月14日
    浏览(32)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包