码迷,mamicode.com
首页 > 其他好文 > 详细

Pytorch实现线性回归

时间:2019-07-20 00:25:55      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:函数   data   去除   多次   bsp   tac   int   ORC   import   

前向传播:

  tensor中的require_grad参数:

    设置为True时,会记录该tensor的计算过程;

  tensor中的grad_fn属性:

    用来保存计算过程;

  tensor设置requires_grad=True后不保留计算过程可使用:

    with torch.no_grad():

      pass

反向传播:

  loss.backward()  #适用于loss(损失值)为一个常数时,大多数时候损失值都为一个标量(常数)

  导数保存在tensor.grad中(tensor为参数矩阵)

  若设置loss.backward(retain_graph=True),可进行多次backward操作,tensor.grad会累加

  只是根据损失值去计算了tensor的梯度,并未更新参数

tensor.data:

  在tensor的requires_grad=False(默认)情况下,tensor.data与tensor等价;

  在tensor的requires_grad=True时,tensor.data值获取tensor中的数据;

tensor.numpy():

  requires_grad=True时,tensor.numpy()无法直接转换,需使用tensor.detach().numpy()(等同于tensor.data.numpy())

 1 import torch
 2 x = torch.randn([500,1])
 3 y = 3*x+1
 4 
 5 #随机初始化w,b
 6 w = torch.rand([],requires_grad=True)
 7 b = torch.rand([],requires_grad=True)
 8 
 9 for i in range(500):
10     #去除每次计算出来的梯度值,防止梯度累加
11     for k in [w,b]:
12         if k.grad is not None:
13             k.grad.zero_() 
14     y_mod = x*w+b
15     #损失函数/损失值
16     loss = (y-y_mod).pow(2).mean()
17     #反向传播
18     loss.backward()
19     #梯度下降/参数更新
20     w.data = w.data-0.1*w.grad
21     b.data = b.data-0.1*b.grad
22     if i%50 == 0:
23         print(w.grad.item(),end="\t")
24         print(b.grad.item(),end="\t")
25         print(str(w.item())+"\t"+str(b.item()))

 

Pytorch实现线性回归

标签:函数   data   去除   多次   bsp   tac   int   ORC   import   

原文地址:https://www.cnblogs.com/nanhua097/p/11216077.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!