美文网首页
pytorch入门--Variable

pytorch入门--Variable

作者: 很菜_嗯 | 来源:发表于2019-03-25 11:29 被阅读0次

    如果用numpy或者Tensor来实现神经网络,需要手动写出前向过程和反向过程。对于简单的网络,反向过程中的导数容易求得,但是随着网络深度以及网络复杂度的增加,求出梯度的解析表达式是非常困难的。PyTorch的包autograd提供了自动求导的功能,当使用autograd时,定义前向网络会生成 一个计算图,每个节点是一个Tensor,边表示由输入Tensor到输出Tensor的函数。沿着计算图的反向传播可以很容易地计算出各个变量的梯度。在实现的时候,用到了Variable对象。Variable对Tensor对象进行封装,只需要Variable::data即可取出Tensor,并且Variable还封装了该Tensor的梯度Variable::grad(是个Variable对象)。现在用Variable作为计算图的节点,则通过反向传播自动求得的导数就保存在Variable对象中了。

    定义:

    input = Variable(torch.randn(N, D_in).type(torch.TensorFloat), requires_grad=False)#默认值是False。requires_grad控制着是否在反向传播过程中对该节点求梯度

    下面通过在pytorch中构建动态计算图。

    构建计算图

    print(x.grad)

    print(w_x.grad)

    .......

    可以求出各个变量的梯度。

    上述代码从最开始处构建了如下的计算图。

    上面的tensor换成Variable。PyTorch中, 将用户创建的Variable称之为叶子节点, 由叶子节点,加减乘除出来的Variable成为非叶子节点, 调用非叶子节点的backward函数, 就会沿着非叶子节点,一路回溯到叶子节点。

    相关文章

      网友评论

          本文标题:pytorch入门--Variable

          本文链接:https://www.haomeiwen.com/subject/uvhvvqtx.html