pytorch_learning-2- 利用pytorch实现简单的线性回归

广播法则:

(1):让所有输入数组都向其中shape最长的数组看齐,shape中不足的加维度1

(2):两个数组要么在某一个维度的长度一致,要么其中一个为一

(3):当输入数组的某个维度的长度为一时,计算时沿此维度复制扩充成一样的形状

pytorch已经支持了自动广播法则

示例:

a = torch.ones(3,2)
b = torch.zeros(2,3,1)
#自动广播法则
#第一步:a为3*2,二维。b为2*3*1,三维。故在a的索引0处补维度1.  a.unsqueeze(0)
#第二步:经第一步,a 为1*3*2,,b为2*3*1。a与b在第一个维度与第三个维度不等,利用广播法则扩展。

a = a.unsqueeze(0).expand(2,3,2)
b = b.expand(2,3,2)
a + b

 利用pytorch实现简单的线性回归

公式:y = wx + b + e

 

损失函数:loss = 

采用随机梯度下降法更新参数

import torch as t
from matplotlib import pyplot as plt
from IPython import display

t.manual_seed(1000)

'''产生随机数据,加噪声'''
def get_fake_data(batch_size = 8):
    x = t.rand(batch_size,1) * 20
    y = x * 2 + (1+t.randn(batch_size,1)) * 3
    return x,y

'''初始化参数'''
w = t.rand(1,1)
b = t.zeros(1,1)

'''学习率'''
lr = 0.001

'''主函数'''
for ii in range(20000):
    x,y = get_fake_data()
    

'''前向传播'''
    y_pred = x.mm(w) + b.expand_as(y)
    y = 0.5 * (y_pred - y) ** 2 #loss
    loss = loss.sum 
    

'''反向传播 ,dw,db的求法???'''

    dloss = 1
    dy_pred = dloss * (y_pred - y) 

    dw = x.t().mm(dy_pred)
    db = dy_pred.sum()

'''更新参数'''
    w.sub_(lr * dw)
    b.sub_(lr * db)


if ii % 1000 == 0:
    #画图
    display.clear_output(wait = True)
    x = t.arange(0,20).view(20,1)
    y = x.mm(w) + b.expand_as(x)
    plt.plot(x.numpy(),y.numpy())

    x2,y2 = get_fake_data(batch_size = 20)
    plt.scatter(x2.numpy(),y2.numpy())


    plt.xlim(0,20)
    plt.ylim(o,45)
    plt.show()    

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值