当使用python sum或torch.sum时,我得到相同的结果,为什么火炬实现了sum函数?它们之间有区别吗?
什么都没有,torch.sum
称tensor.sum
和python的sum
称__add__
(或需要的__radd__
)再次调用tensor.sum
所以唯一的区别在于函数调用的数量,并且tensor.sum()
应该是最快的(当你有小张量并且函数调用的开销相当大)
看起来python的总和可以将生成器作为输入,而torch.sum不能:
import torch
print( sum( torch.ones(1)*k for k in torch.arange(10)))
返回tensor([45.])
,而:
print( torch.sum( torch.ones(1)*k for k in torch.arange(10)))
引发TypeError: sum(): argument 'input' (position 1) must be Tensor, not generator
我假设pyTorch的反向传播会对发生器的惰性评估遇到麻烦,但还不确定。