当前位置: 首页 > news >正文

用Pytorch实现线性回归(Linear Regression with Pytorch)

使用pytorch写神经网络的第一步就是需要准备好数据集,设计模型(用于计算y_hat(y的预测值)),构造损失函数和优化器(使用PyTorch API),写训练周期(前馈(算loss)+反馈(算梯度)+更新(更新权重))

一:准备数据

现在使用mini-batch的方式,X和Y为3x1(可以变,但是x和y要相同)的矩阵形式。

从代码中也可以看出来,x和y都是3x1的矩阵。

二:设计模型(构造计算图)

此处使用了一个仿射模型(在pytorch中叫做线性单元)

在我们设计的例子中,我们需要设置权重w的数值,和偏置量b。

那w和b的形状(几x几的矩阵),是由y_hat和x来共同确定。

之后将y_hat和y放入loss函数中进行计算,得出loss的值(一定是一个标量)。

看下模型设计的代码:

#需要继承自module ,因为module中有很多方法我们需要使用
class LinearModel(torch.nn.Module):def __init__(self): #构造函数 在初始化对象时默认调用的函数super(LinearModel,self).__init__() #super调用父类的构造self.linear = torch.nn.Linear(1,1) #构造一个对象 linear Unit中的w和b(linear来自父类,可以自动反向传播)def forward(self,x): #前馈需要进行的计算 发现没有backword模块,因为Module中自动根据计算图实现backword过程y_pred = self.linear(x)return y_predmodel = LinearModel() #实例化 在之后既可以使用model(x)将x传入forword中的x,求得y_pred

其中torch.nn.Linear 的使用方法如下 

三:构造loss和optimizer

此处我们使用MSEloss,需要的参事时y_hat和y,就可以求出loss。

代码如下:

criterion = torch.nn.MSELoss(size_average=False)

我们使用SGD优化器(不会构建计算图),代码如下

optimizer = torch.optim.SGD(model.parameters(),lr=0.01)

四:训练过程

for epoch in range(100):y_pred = model(x_data)  #先计算出y_hatloss = criterion(y_pred,y_data) #再计算出lossprint(epoch,loss.item()) optimizer.zero_grad()#在反馈前将梯度清0loss.backward()#反馈optimizer.step()#更新

最后打印一些相关内容

# w b
print('w=',model.linear.weight.item())
print('b=',model.linear.weight.item())#Test Model
x_test = torch.Tensor([[4.0]])
y_test = model(x_test)
print('y_pred=',y_test.data)

发现当range为1000时,已经达到了我们的预期。

五:整体流程

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基于luckysheet实现在线电子表格和Excel在线预览
  • 防火墙NAT地址转换和智能选举综合实验
  • 代谢组数据分析(十五):基于python语言构建PLS-DA算法构建分类模型
  • LLM-阿里 DashVector + langchain self-querying retriever 优化 RAG 实践【Query 优化】
  • springboot系列教程(一):简介与入门案例(含源码)
  • html5——CSS列表样式属性
  • django报错(一):python manage.py makemigrations,显示“No changes detected”
  • android的跨进程通讯方式
  • Qt窗口程序整理汇总
  • 【D3.js in Action 3 精译】第二章 DOM 的操作方法
  • 大语言模型 API
  • 虚拟机及其Debian(kali)安装
  • 元服务体验-服务发现
  • 基于STM32设计的物联网智能鱼缸(微信小程序)(187)
  • 进程通信(3): System V IPC
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • JavaScript服务器推送技术之 WebSocket
  • mysql外键的使用
  • Xmanager 远程桌面 CentOS 7
  • 百度小程序遇到的问题
  • 大数据与云计算学习:数据分析(二)
  • 二维平面内的碰撞检测【一】
  • 缓存与缓冲
  • 入门到放弃node系列之Hello Word篇
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 使用Swoole加速Laravel(正式环境中)
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • (02)Hive SQL编译成MapReduce任务的过程
  • (20050108)又读《平凡的世界》
  • (3)选择元素——(17)练习(Exercises)
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (转) 深度模型优化性能 调参
  • (转)jdk与jre的区别
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • *算法训练(leetcode)第四十七天 | 并查集理论基础、107. 寻找存在的路径
  • .bat批处理(六):替换字符串中匹配的子串
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .Net中的集合
  • .NET周刊【7月第4期 2024-07-28】
  • @Autowired @Resource @Qualifier的区别
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思
  • @ModelAttribute注解使用
  • @RequestBody与@ResponseBody的使用