首页 > 其他分享 >线性回归从零开始(麻雀虽小五脏俱全)

线性回归从零开始(麻雀虽小五脏俱全)

时间:2024-03-30 15:23:48浏览次数:25  
标签:麻雀虽小 num features torch batch 从零开始 五脏俱全 examples size

目录
线性回归是一个很好能理解深度学习的模型,麻雀虽小五脏俱全。

构造数据集

def synthetic_data(w, b, num_examples):
  X = torch.normal(0, 1, (num_examples, len(w)))
  y = torch.matmul(X, w) + b
  y += torch.normal(0, 0.01, y.shape)
  return X, y.reshape((-1, 1))

true_w = torch.tensor([2, -3.4])
true_b = 4.2
features, labels = synthetic_data(true_w, true_b, 1000)

定义一个获取小批量数据集的函数

def data_iter(batch_size, features, labels):
  num_examples = len(features)
  indices = list(range(num_examples))
  random.shuffle(indices)
  for i in range(0, num_examples, batch_size):
    batch_indices = torch.tensor(
        indices[i:min(i+batch_size, num_examples)])
    yield features[batch_indices], labels[batch_indices]
batch_size = 10

for X, y in data_iter(batch_size, features, labels):
    print(X, '\n', y)
    break

初始化模型参数

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

定义模型

def linreg(X, w, b):
  return torch.matmul(X, w) + b

定义损失函数

def squared_loss(y_hat, y):
  return (y_hat - y.reshape(y_hat.shape))**2 / 2

定义优化算法

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

训练过程

lr = 0.03
num_epochs = 3
net = linreg
loss = squared_loss

for epoch in range(num_epochs):
  for X, y in data_iter(batch_size, features, labels):
    l = loss(net(X, w, b), y)
    l .sum().backward()
    sgd([w, b], lr, batch_size)
  with torch.no_grad():
    train_l = loss(net(features, w, b), labels)
    print(f'epoch {epoch + 1}, loss{float(train_l.mean()):f}')

标签:麻雀虽小,num,features,torch,batch,从零开始,五脏俱全,examples,size
From: https://www.cnblogs.com/cxy8/p/18104194

相关文章

  • Kubernetes超详细教程,一篇文章帮助你从零开始学习k8s,从入门到实战
    k8s概述k8sgithub地址:https://github.com/kubernetes/kubernetes官方文档:https://kubernetes.io/zh-cn/docs/home/k8s,全程是kubernetes,这个名字源于希腊语,意为"舵手"或"飞行员”k8s这个缩写是因为k和s之间有八个字符Google在2014年开源了k8s项目,k8s是一个......
  • 黑客零基础入门教程及方法,从零开始学习黑客技术,看这一篇就够了
    黑客,对于很多人来说,是一个神秘的代名词,加之影视作品夸张的艺术表现,使得黑客这个本来只专注于技术的群体,散发出亦正亦邪的神秘色彩。黑客源自英文hacker一词,最初曾指热心于计算机技术、水平高超的电脑高手,尤其是程序设计人员,逐渐区分为白帽、灰帽、黑帽等。其中,白帽黑客被......
  • YOLOv9 实战指南:打造个性化视觉识别利器,从零开始训练你的专属测试集
    论文地址:YOLOv9:LearningWhatYouWanttoLearnUsingProgrammableGradientInformationGitHub:WongKinYiu/yolov9:Implementationofpaper-YOLOv9:LearningWhatYouWanttoLearnUsingProgrammableGradientInformation(github.com)一、摘要今天的深度学习......
  • 从零开始学c语言(3)
    常用运算符运算方法&(按位与)  |(按位或)^(按位异或) <<(左移)>>(右移) ~(按位求反) ......
  • 如何快速上手Vue框架:从零开始的Vue之旅
    引言Vue.js是一个渐进式JavaScript框架,用于构建用户界面。它易于上手,同时提供了强大的工具和功能,使得开发者能够快速构建复杂的单页应用程序(SPA)。本文将带你了解Vue的基本概念,并通过实例来快速上手这个流行的前端框架。环境准备在开始之前,确保你的开发环境中安装了以下工......
  • 从零开始写 Docker(九)---实现 mydocker ps 查看运行中的容器
    本文为从零开始写Docker系列第九篇,实现类似dockerps的功能,使得我们能够查询到后台运行中的所有容器。完整代码见:https://github.com/lixd/mydocker欢迎Star推荐阅读以下文章对docker基本实现有一个大致认识:核心原理:深入理解Docker核心原理:Namespace、Cgroups......
  • 深入探究App压力测试的关键要点:从零开始学习Monkey
    简介Monkey是Google提供的一个用于稳定性与压力测试的命令行工具可以运行在模拟器或者实际设备中它向系统发送伪随机的用户事件对软件进行稳定性与压力测试为什么要用MonkeyMonkey就是像猴子一样上蹿下跳地乱点为了测试软件的稳定性,健壮性随机点击比顺序点击更容易......
  • 《从零开始学架构》读书
    《从零开始学架构》读书由于软考变革,一些计划下半年读的书开始提前读,《从零开始学架构》这本书大概读了十天,合上书后反想确实是有些收获,再梳理下加深印象architecturereferstothefundamentalstructuresofasoftwaresystem,thedisciplineofcreatingsuchstructure......
  • 从零开始的 dbt 入门教程 (dbt cloud 自动化篇)
    一、引在前面的几篇文章中,我们从dbtcore聊到了dbt项目工程化,我相信前几篇文章足够各位数据开发师从零快速入门dbt开发,那么到现在我们更迫切需要解决的是如何让数据更新做到定时化,毕竟作为开发我们肯定没有经历每天定点去手动运行dbt命令,那么今天我们将带领大家快速上手......
  • 从零开始的terraform之旅 - 3命令部分- 部署基础架构 (plan apply destroy)
    3命令部分-部署基础架构(planapply)文章目录3命令部分-部署基础架构(planapply)部署基础架构planplanningmodes**Refresh-onlymode**仅刷新模式,非常有用PlanningOptions规划选项apply命令Plan**Options**apply选项destroy命令部署基础架构terraform的......