• pytorch中contiguous()


    参考博客1

    参考博客2

    在PyTorch中,有一些对Tensor的操作不会真正改变Tensor的内容,改变的仅仅是Tensor中字节位置的索引。这些操作有:

    narrow(), view(), expand(), transpose()

    例如执行view操作之后,不会开辟新的内存空间来存放处理之后的数据,实际上新数据与原始数据共享同一块内存。

    而在调用contiguous()之后,PyTorch会开辟一块新的内存空间存放变换之后的数据,并会真正改变Tensor的内容,按照变换之后的顺序存放数据。


    contiguous:view只能用在contiguous的tensor上。如果在view之前用了 transpose, permute 等,需要用 contiguous() 来返回一个contiguous copy。

    一种可能的解释是:

    有些tensor并不是占用一整块内存,而是由不同的数据块组成,而tensor的view()操作依赖于内存是整块的,这时只需要执行contiguous()这个函数,把tensor变成在内存中连续分布的形式。

    判断是否contiguous用torch.Tensor.is_contiguous()函数。

    import torch
    x = torch.ones(10, 10)
    x.is_contiguous()  # True
    x.transpose(0, 1).is_contiguous()  # False
    x.transpose(0, 1).contiguous().is_contiguous()  # True
    
  • 相关阅读:
    开启CTF大门
    关于windows下scapy出现log_runtime问题
    Python关于Threading暂停恢复解决办法
    angr入门之CLE
    Linux信号量
    IDApython 命令
    Array 数组对象
    随机数 random()
    四舍五入round()
    向下取整floor()
  • 原文地址:https://www.cnblogs.com/douzujun/p/13640037.html
Copyright © 2020-2023  润新知