autograd.record 这个具体含义是什么呢


#1

在学习过程中,知道了autograd.record(),是‘默认条件下,MXNet不会自动记录和‘构建’用于求导的计算图,我们需要使用autograd里的record()函数来显式的要求MXNet记录我们需要求导的程序。’的意思。
但是具体是什么呢?比如它在所划定了一定的内存空间(attach_grad)存储函数及计算过程?然后之后操作来调用?record的作用仅限于此处?

另外with之前经常用于文本读写,在这里感觉有点蒙。

又想到一个问题,‘默认不会记录’,就是说默认情况下不需要输入函数关系? 很难想象‘默认’的这种状态存在的意义。


#2

with的含义是作为一个上下文管理器,可以表示这个代码块处于某种状态。
引入record在每次构建网络,或者计算BN之类的层,可以不用手动指定是train或test,默认是inference的情况下开箱即用还是挺方便的。需要计算梯度的时候把forward代码放在record作用的代码块里就好。


#3

感谢回复。