深度学习计算图的解释
由于计算图是个很抽象的问题,今天我就来解释一下关于计算图的知识。
什么是计算图:
一般是记录一个元素的计算过程用的。设置好计算图后不需要我们手动求导,系统会根据生成的计算图,当我们一旦反向传播时(backward())就会自动求导

1.是否允许创建计算图
如果 requires_grad=True 这个参数设置成true表示在进行运算时会自动创建计算图(很关键),但这里还不等于已经创建好了计算图
w = torch.normal(0, 0.01, size=(num_inputs, num_outouts), requires_grad=True)
2.自动创建计算图
加入我们定义了softmax模型,里面就有w的运算,当我们一旦调用net方法就等于对w做了一次运算,所以系统会自动帮我们创建一个计算图
所以创建计算图的标准就是:看我们允许生成计算图的那个变量(例如上面的w)进行了一些运算。那么运算图就会把他进行的运算过程记录下来,形成计算图。
'''定义模型'''
def net(x):
# softmax里面的参数其实就是(x,m)的内积
return softmax(torch.matmul(x.reshape(-1, w.shape[0]), w) + b)
y_hat = net(x) #调用net模型
3.反向模式(也可以理解计算图的销毁)
当我们用调用自动求导时,系统会自动对w进行求导,然后把计算图销毁
例如 :
l = loss(y_hat, y)
l.mean().backward()
因为l中有y_hat,y_hat中有w,而w会自动生成计算图,并且可以根据计算图反向传播,实现l关于w的自动求导。因此一调用backward时等于系统调用反向传播,自动对w求导。然后把计算图销毁
4.计算图的再生成
一个轮次epochs可以能有多个批次训练模型,因为每一批次训练基本都会生成一个计算图,每个计算图又不一样,因为我们传进来的x不一样。计算图实际上不是存的某个值,而是关于x的运算,例如w1 * x1 + w2 * x2等等这些运算步骤。所以保证了每次计算图不一样
5.注意:
一般我们在训练时一般都要求生成计算图,但在评估的时候不会允许计算图的拓展
所以在评估时用with no_grad(): 来限制
一些心得,希望可以帮助大家。如有不对请更正,谢谢大家
更多推荐


所有评论(0)