首页 > 其他分享 >线性回归实现

线性回归实现

时间:2022-08-26 22:34:33浏览次数:53  
标签:定义 实现 梯度 回归 线性 net data 模型

深度学习第一章:最简单的线性回归实现

1. 引言

AI领域的线性回归和其他领域不太一样,包括了名词和实现方式,所以必须先认识重要名词,再把所有步骤熟悉一边,并建立在之前学习线性回归的基础上

2. 学习目的:

  1. 知道线性回归是什么
  2. 知道线性回归在深度学习领域怎么在python上实现
  3. 代码实现,运行结果
  4. 知道每行代码怎么来的
  5. 了解与后面的联系

3. 线性回归是什么

4. python 实现步骤

  1. 数据部分
    1. 数据生成
    2. 数据处理(小批量提取,生成迭代器)
  2. 模型初始化
    1. 模型定义
    2. 模型初始化
    3. 损失函数定义
  3. 更新规则:
    1. 优化函数定义:SGD 梯度下降
  4. 训练(包含求出损失,反向传递,梯度下降,梯度清零)

5. 代码部分+解读:

import torch as tc
import numpy as np
from torch.utils import data
from  LimuAi.Linear_regression import synthetic_data
from torch import nn
#处理数据:
'''
定义实际数据
'''
true_k=tc.tensor([2,-3.4])
true_b=4.2
feature,lable=synthetic_data(true_k,true_b,1000) #数据初始化
'''
定义读取数据的方法
'''
def read_data(sample,batch_size,is_train=True):#python是一个缩进控制组块的语言
    dataset=data.TensorDataset(*sample) #将sample变成元组之后,经过TensorDataset变成dataset对象,方便传入dataloader函数进行小批量的抽取(我猜的,还没求证)
    return data.DataLoader(dataset,batch_size,shuffle=is_train) #返回一个迭代器,小批量的返回样本数据


batch_size=10
item=read_data((feature,lable),batch_size) #生成item作为下方训练用的迭代器,进行小批量随机梯度下降
print(next(iter(item))) # 使用next得出第一个小批次

'''
定义模型
'''



net = nn.Sequential(nn.Linear(2, 1)) #搭建一个单层神经网络,并且神经元使用的是线性结构,且有两个输入,一个输出


'''
初始化模型参数
'''

net[0].weight.data.normal_(0, 0.01)#对net实力初始化模型即使用[0]来定位,weight/bias .data来初始化,
net[0].bias.data.fill_(0)
'''
定义损失函数
'''
loss = nn.MSELoss() #使用nn底下的包即可实现计算MSE

'''
定义优化算法
'''

trainer = tc.optim.SGD(net.parameters(), lr=0.03)
#把优化算法也定义成对象,通过torch的optim包的SGD来实例化,SGD实例化需要模型参数和学习率(也是梯度下降所必须的)
#参数通过net的parameter可直接输入


'''
训练
'''
num_epochs = 3 #把数据集遍历三遍
for epoch in range(num_epochs): #迭代器必须是一个list/元组之类的
    for X, y in item: #取出随机小批次,用来梯度下降
        l=loss(net(X),y)#比较计算出的yhat和真实的y的RMSE
        trainer.zero_grad() #用来清除模型的累计梯度
        l.backward() #反向传递,回调
        trainer.step() #更新模型参数
    l=loss(net(feature),lable)
    print(f'epoch {epoch + 1}, loss {l:f}')

标签:定义,实现,梯度,回归,线性,net,data,模型
From: https://www.cnblogs.com/yujiesun-818/p/16629449.html

相关文章

  • QT使用HTTP下载来实现程序下载自动安装退出,同时读取JSON更新信息。
    最近在用QT开发一套免费的HelpDesk系统,参考了网上的方法,实现了程序自动下载更新和程序自动退出再安装新程序,为了感谢网页的无私分享,自己也特地分享给大家,希望可以帮助到大......
  • 【线性模式】
    importnumpyasnpdefcompute_error_for_line_given_points(b,w,points):total_error=0foriinrange(0,len(points)):x=points[i,0]......
  • new与malloc的区别以及实现方法
    new和malloc的内存分配在哪分配在堆上。也有说new是分配在自由存储区而malloc分配在堆上,自由存储区可以是堆也可以不是,具体要看new内部的实现。操作系统在堆上维护一个......
  • c++实现通讯录管理系统
    利用C++来实现一个通讯录管理系统系统中需要实现的功能如下:添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄,联系电话、家庭住址)最多记录1000人显示联系人:显......
  • JS中实现浅拷贝与深拷贝的几种方式
    浅拷贝只拷贝第一层的值,其他后面拷贝的是地址,拷贝后的对象与原对象不是同一个地址,拷贝时会开一个内存给拷贝的对象第一层进行值拷贝,第二层及之后进行地址拷贝示例:快捷......
  • gdb的pretty-printer实现及使用
    一、prettyprinter即使在有调试器的情况下,打印(print)信息也是定位问题的重要和有效手段,所以一些变量的打印就非常重要,例如C++中流行的libfmt库,gcc扩展的"PRETTY_FUNCTIO......
  • 【MySql】Update批量更新与批量更新多条记录的不同值实现方法
    批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:UPDATEmytableSETmyfield='value'WHEREother_field='other_value';如果更新同一字段为同一个......
  • LeetCode 232. 用栈实现队列
    思路:用两个栈实现队列pop操作,若out栈为空则先将in中元素push进out,再pop出out中元素peek操作,直接调用pop,在将pop出元素push进outclassMyQueue{public:stack<int......
  • wangEditor如何能实现直接粘贴把图片上传到服务器中
    ​如何做到ueditor批量上传word图片?1、前端引用代码<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML1.0Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-......
  • VS Code实现SSH远程开发
    最近收获一台新台式机,但是个人主要还是使用自己的笔记本,用了几天远程控制,感觉各种不方便,最终决定配置一下VSCode实现SSH远程开发,特此记录。首先介绍一下环境,控制端是Wind......