当我们参考一些基于pytorch的深度学习代码时,不难发现当我们不希望计算被反向传播,进入梯度计算时,会使用到detach()
或with torch.no_grad()
.
那么两者有些什么区别呢?
当我们使用with torch.no_grad()
时,我们即创建了一张图,在这张图中,所有的计算都不会进入梯度计算。但当我们使用detach()
时,我们则是将一个变量从图中剥离出来进而使得此变量的计算不会进入到梯度计算中。
当我们参考一些基于pytorch的深度学习代码时,不难发现当我们不希望计算被反向传播,进入梯度计算时,会使用到detach()
或with torch.no_grad()
.
那么两者有些什么区别呢?
当我们使用with torch.no_grad()
时,我们即创建了一张图,在这张图中,所有的计算都不会进入梯度计算。但当我们使用detach()
时,我们则是将一个变量从图中剥离出来进而使得此变量的计算不会进入到梯度计算中。