当前位置:  开发笔记 > 编程语言 > 正文

使用PyTorch进行就地操作

如何解决《使用PyTorch进行就地操作》经验,为你挑选了0个好方法。

我想知道如何处理PyTorch中的就地操作.我记得在autograd中使用就地操作一直存在问题.

实际上,我很惊讶下面这段代码可以工作,即使我没有测试它,我相信这段代码会引发版本错误0.3.1.

基本上我想做的是将张量向量的某个位置设置为某个值,如:

my_tensor[i] = 42

工作示例代码:

# test parameter a
a = torch.rand((2), requires_grad=True)
print('a ', a)
b = torch.rand(2)

# calculation
c = a + b

# performing in-place operation
c[0] = 0
print('c ', c)
s = torch.sum(c)
print('s ', s)

# calling backward()
s.backward()

# optimizer step
optim = torch.optim.Adam(params=[a], lr=0.5)
optim.step()

# changed parameter a
print('changed a', a)

输出:

a  tensor([0.2441, 0.2589], requires_grad=True)
c  tensor([0.0000, 1.1511], grad_fn=)
s  tensor(1.1511, grad_fn=)
changed a tensor([ 0.2441, -0.2411], requires_grad=True)

很明显在版本中0.4.1.这没关系没有警告或错误.

参考文档中的这篇文章:autograd-mechanics

在autograd中支持就地操作是一件很难的事情,我们不鼓励在大多数情况下使用它们.Autograd积极的缓冲区释放和重用使其非常高效,并且在就地操作实际上会大幅降低内存使用量的情况非常少.除非您在巨大的内存压力下运行,否则您可能永远不需要使用它们.

但即使它有效,在大多数情况下也不鼓励使用就地操作.


所以我的问题是:

就地操作的使用对性能有多大影响?

在我想将张量的一个元素设置为某个值的情况下,如何使用就地操作?

提前致谢!

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有