【pytorch 入门系列】01深度学习-入门实例线性回归--pytorch版本&自定义版本

step1: 导入库

import torch
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

step2 :读取数据

data = pd.read_csv('./dataset/Income1.csv')

在这里插入图片描述
step2 :scatter


plt.scatter(data.Education, data.Income)
plt.xlabel('Education')
plt.ylabel('Income')
plt.show()

在这里插入图片描述
看这个形状,太适合线性回归了忍不住啊。
step 3: 构建模型,数据和损失函数 训练


from torch import nn
model = nn.Linear(1, 1)
loss_fn = nn.MSELoss()
# 数据预处理,并且统一数据类型
X = torch.from_numpy(data.Education.values.reshape(-1, 1)).type(torch.FloatTensor)
Y = torch.from_numpy(data.Income.values.reshape(-1, 1)).type(torch.FloatTensor)
opt = torch.optim.SGD(model.parameters(), lr=0.0001)

for epoch in range(5000):
    for x, y in zip(X, Y):
        y_pred = model(x)
        loss = loss_fn(y, y_pred)
        opt.zero_grad()
        loss.backward()
        opt.step()
model.weight

在这里插入图片描述
最终效果:
在这里插入图片描述
基本功还得练啊,好多都忘了.
git:https://github.com/justinge/learn_pytorch.git

 这三项的顺序必须是 梯度清零, 反向传播,梯度下降优化
    opt.zero_grad()
    loss.backward()
    opt.step()
for epoch in range(5000):
    for x,y in zip(X,Y):
        # 一行一个batch size, 所以一行梯度一清理,这次集散的梯度和下次的无关,是调整过后
        y_pred = model(x)
        loss = loss_fn(y,y_pred)
        # 这三项的顺序必须是 梯度清零, 反向传播,梯度下降优化
        opt.zero_grad()
        loss.backward()
        opt.step()

下面完成自定义版本:
分解写法

w = torch.randn(1, requires_grad=True)
b = torch.randn(1, requires_grad=True)

模型的公式:w@x+b

learn_rate = 0.0001
for epoch in range(5000):
    for  x,y in zip(X, Y):
        y_pred = torch.matmul(x, w) + b
        # 计算损失,自己手动计算
        loss  = (y-y_pred).pow(2).sum()
        # 清零梯度
        if not w.grad is None:
            w.grad.data.zero_()
        if not  b.grad is None:
            b.grad.data.zero_()
        # backward()
        loss.backward()
        # opt.step()
        with torch.no_grad():
            w.data -= w.grad.data * learn_rate
            b.data -= b.grad.data * learn_rate
plt.scatter(data.Education, data.Income)
plt.plot(X.numpy(), (torch.matmul(X, w) + b).data.numpy(), c='r')

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值