memory - 在不复制内存的情况下重复 pytorch 张量

标签 memory pytorch tensor

是否pytorch支持重复张量 无需分配更多内存 ?

假设我们有一个张量

t = torch.ones((1,1000,1000))
t10 = t.repeat(10,1,1)

重复 t 10 次将需要占用 10 倍的内存。有没有办法创建张量 t10没有分配更多的内存?

Here是一个相关的问题,但没有答案。

最佳答案

您可以使用 torch.expand

t = torch.ones((1, 1000, 1000))
t10 = t.expand(10, 1000, 1000)

请记住,t10只是对 t 的引用.例如,更改为 t10[0,0,0]将导致 t[0,0,0] 中的相同变化和t10[:,0,0]的每一位成员.

除了直接访问,大多数操作在 t10 上执行将导致内存被复制,这将破坏引用并导致使用更多内存。例如:更改设备( .cpu().to(device=...).cuda() )、更改数据类型( .float().long().to(dtype=...) 4),或使用 |67914| .

关于memory - 在不复制内存的情况下重复 pytorch 张量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59757933/

相关文章:

c++ - 保存对象的析构函数地址并在以后调用它是否定义明确的行为?

python - 将one-hot编码维度转换为1的位置索引

python - 如何将其中没有的列表转换为 torch.tensor()?

c - 为什么两个连续共享内存区域上的 mremap 会导致 SIGBUS?

c++ - C++中指向函数指针的指针

c - 连续的指针分配;重新分配还是分配不同?

pytorch - 如何修复 DGL 中的 'ImportError:/home/... .../lib/libtorch.so.1: undefined symbol: nvrtcGetProgramLogSize'?

pytorch - 如何查看 PyTorch kl_divergence 函数中可以使用的所有可能的分布?

c++ - 如何在 C++ 中将特征张量乘以另一个特征张量的标量和?

python - 将多维张量中的一个值映射到另一个值