首页 > 其他分享 >3-线性回归从零实现

3-线性回归从零实现

时间:2024-08-22 17:51:32浏览次数:5  
标签:loss 实现 回归 torch batch param 线性 grad size

1、注意 = 和 -=在梯度更新时的区别
def minbatch_sgd(params, lr, batch_size):
with torch.no_grad():
for param in params:
param = param - lr*param.grad / batch_size
param.grad.zero_()
这段代码是错误的,应该改成param -= lr * param.grad / batch_size
原因如下:

import torch
import random

w = torch.normal(0, 0.01, size=(2,1), requires_grad=True)
b = torch.zeros(1, requires_grad=True)

# 准备数据
# 生成features和labels
def synthetic_data(w, b, num_examples):
    x = torch.normal(0, 1, (num_examples, 2))
    y = torch.matmul(x, w) + b
    y += torch.normal(0, 0.01, y.shape)
    return x, y.reshape((-1, 1))

temporary_w = torch.tensor([2, -3.4])
temporary_b = 4.2
features, labels = synthetic_data(temporary_w, temporary_b, 10000)

# 批量读取数据集
def data_iter(featurs, labels, batch_size):
    num_examples = len(featurs)
    indices = list(range(num_examples))
    random.shuffle(indices)

    for i in range(0, num_examples, batch_size):
        batch_indices = torch.tensor(indices[i: min(num_examples, i + batch_size)])
        yield featurs[batch_indices], labels[batch_indices]

# 定义模型
def linreg(x, w, b):
    return torch.matmul(x, w) + b

# 定义损失函数和优化器
def square_loss(y_pred, y):
    return (y_pred - y.reshape(y_pred.shape)) ** 2 / 2

def minbatch_sgd(params, lr, batch_size):
    with torch.no_grad():
        for param in params:
            param -= lr*param.grad / batch_size
            param.grad.zero_()


# 进行训练
lr = 0.01
epochs = 100
batch_size = 10

for epoch in range(epochs):
    for X, Y in data_iter(features, labels, batch_size): # 每次批量取出数据
        loss = square_loss(linreg(X, w, b), Y)
        # 因为l形状是(batch_size,1),⽽不是⼀个标量。l中的所有元素被加到⼀起,
        # 并以此计算关于[w,b]的梯度
        loss.sum().backward() # 反向传播
        minbatch_sgd([w, b], lr, batch_size)
    with torch.no_grad():
        train_loss = square_loss(linreg(features, w, b), labels)
        print('epoch:{}  loss:{}'.format(epoch, train_loss.mean()))  # train_loss.mean() 对张量求和并取均值

标签:loss,实现,回归,torch,batch,param,线性,grad,size
From: https://www.cnblogs.com/morehair/p/18374424

相关文章

  • CSharp联合halcon实现模板匹配
    前言1、加载并显示图像功能。2、图像拖动缩放功能。3、绘制ROI:矩形、方向矩形、圆形、椭圆形。4、创建模板:参数修改、模板轮廓显示。5、匹配模板:参数修改、匹配轮廓显示、匹配结果显示。案例实操代码结构HalconModelSet_Ex:该目录空间下存放halcon算子相关模型(......
  • 【源码+论文】基于springboot的信息技术知识竞赛系统的设计与实现
    系统包含:源码+论文所用技术:SpringBoot+Vue+SSM+Mybatis+Mysql免费提供给大家参考或者学习,获取资料请私聊我目录第1章绪论 11.1选题动因 11.2目的和意义 11.3论文结构安排 2第2章开发环境与技术 32.1MYSQL数据库 32.2Tomcat介绍 32.3vue技术 42.4Sp......
  • uniapp [全端兼容] - 最新详细实现拍摄视频录像并可播放预览视频,调起本机摄像头开启录
    前言网上的教程乱七八糟BUG太多,本文提供优质示例代码。在uni-app全平台兼容(H5网页网站、支付宝/微信小程序、安卓App、苹果App、nvue)项目开发中,详解完成“uniApp拍摄录制视频并预览播放”,调起本机系统摄像头打开视频录制,用户点击按钮开始拍摄视频最终完成摄影,然后保......
  • 基于SpringBoot+Vue的学生作业管理系统的详细设计和实现(25年最新,附源码+论文+部署讲
    文章目录1.前言2.系统演示录像3.论文参考4.代码运行展示图5.技术框架5.1SpringBoot技术介绍5.2Vue技术介绍6.可行性分析7.系统测试7.1系统测试的目的7.2系统功能测试8.数据库表设计9.代码参考10.数据库脚本11.找我做程序,有什么保障?12.联系我们1.前......
  • 微信小程序实现定位功能
    分享两个微信小程序获取定位的办法,用的腾讯的地图,可根据自己的情况改动前情提示:提前在您的app.json上加上这些代码"permission":{"scope.userLocation":{"desc":"你的位置信息将用于地图中定位"}}这样才可以继续实现定位功能第一种:wx.getLocation......
  • CANoe_UDS-boorloader 自动化测试系列(六)基本功能:CAPL实现bin文件数据解析
    CANoe_UDS-booroader自动化测试系列(一)创建一个CANoe测试工程(测试节点的选选择)CANoe_UDS-booroader自动化测试系列(二)基本刷写流程CANoe_UDS-booroader自动化测试系列(三)基本功能:CAPL实现UDS协议下的CAN报文接收#解析#发送CANoe_UDS-booroader自动化测试系列(四)基本功能:CAPL实......
  • Python 实现批量数字二维码生成器
    Python实现批量数字二维码生成器创建时间:2024-08-09一、背景手动逐个生成特定格式和内容的二维码是一项繁琐且耗时的任务。虽然有写二维码工具也可以制作,但是往往有一些限制,为了能够高效、批量生成自定义二维码的需求,开发了这个基于Python的数字二维码生成器应用程序。在实......
  • 原生js实现下滑到当前模块进度条填充
    <divstyle="height:1500px;"></div><divclass="progress-container"><divclass="progress-bar"data-progress="90%"><pclass="progress-text">GoogleAds在Google搜索引擎上覆盖超过90%......
  • 集合及数据结构第八节(上)————栈(Stack)、栈的模拟实现和应用
    系列文章目录集合及数据结构第八节(上)————栈(Stack)、栈的模拟实现和应用栈(Stack)、栈的模拟实现和应用(上)栈的概念栈的使用栈的模拟实现栈的应用场景栈、虚拟机栈、栈帧的概念区分文章目录系列文章目录集合及数据结构第八节(上)————栈(Stack)、栈的模拟实现和应用......
  • 集合及数据结构第七节————LinkedList的模拟实现与使用
    系列文章目录集合及数据结构第七节————LinkedList的模拟实现与使用LinkedList的模拟实现与使用无头双向链表实现什么是LinkedListLinkedList的使用LinkedList的遍历ArrayList和LinkedList的区别文章目录系列文章目录集合及数据结构第七节————LinkedList的模......