我理解autograd
用于表示自动区分。但是{
例如:
In pytorch, there is no traditional sense of tape
和this
We don’t really build gradient tapes per se. But graphs.
但不是this
Autograd is now a core torch package for automatic differentiation. It uses a tape based system for automatic differentiation.
为进一步参考,请将其与Tensorflow
中的GradientTape
进行比较
有不同类型的自动分化,例如}中的{}autograd仅指使用反向模式自动微分,{a2}。反向模式自动差异只是一种用于有效计算梯度的技术,它恰好被反向传播,source使用
forward-mode
、reverse-mode
、hybrids
;(more explanation)。{现在,在PyTorch中,Autograd是自动区分的核心火炬包。它使用
tape-based
系统进行自动鉴别。在前进阶段,autograd
磁带将记住它执行的所有操作,在后退阶段,它将重放操作同样在TensorFlow中,为了自动区分,它还需要记住在向前传递期间以什么顺序发生的操作。然后,在向后传递过程中,TensorFlow以相反顺序遍历此操作列表以计算梯度。现在,TensorFlow提供了用于自动区分的^{} API;也就是说,计算关于某些输入的计算梯度,通常是^{} 。TensorFlow将^{} 上下文中执行的相关操作记录到磁带上。然后,TensorFlow使用该磁带计算使用reverse mode differentiation记录的计算的梯度
因此,正如我们从高层观点所看到的,两者都在做相同的操作。然而,在自定义训练循环期间,{}过程和{}的计算在{}中更加明确,因为它使用{}API作用域,而在{}中,这些操作是隐式的,但需要在更新训练参数(权重和偏差)时将{}标志临时设置为{}。为此,它显式地使用^{} API。换句话说,TensorFlow的
tf.GradientTape()
类似于PyTorch的loss.backward()
。下面是上述语句代码中的简化形式仅供参考,在上述两个框架中,可训练变量(
w
,b
)都是手动更新的,但我们通常使用优化器(例如adam
)来完成这项工作我怀疑这是因为'tape'这个词在自动区分的上下文中有两种不同的用法
当人们说pytorch不是基于磁带的时,他们的意思是它使用操作符重载,而不是[基于磁带的]源转换来自动区分
相关问题 更多 >
编程相关推荐