【项目实战】用Pytorch实现线性回归
视频教程:https://www.bilibili.com/video/BV1Y7411d7Ys?p=5
准备数据
首先配置了环境变量,这里使用python3.9.7版本,在Anaconda下构建环境运行,并且安装pytorch
决定使用模型y=wx+b
然后根据视频在pycharm中输入如下代码
import torch
x_data=torch.Tensor([[1.0],[2.0],[3.0]])
y_data=torch.Tensor([[2.0],[4.0],[6.0]])
首先这里预期使用小批量梯度下降
而在使用numpy的时候会有广播机制存在,会自动把不能相加的矩阵直接扩充广播成相同大小,而我们的Tensor构造的时候就需要注意了,我们必须要保证我们构造的数据一开始就是矩阵,所以必须用[1.0],[2.0],[3.0]的方法来进行构造
设计模型
在pytorch中目标不再是人工求出导数,重点变成了构造计算图
构造计算图首先要知道X的维度,还需要知道输出的y是几维的,这样就可以确定w权重以及b偏值的形状
这样就可以输入x,经过w和b计算出y,再由y算出算是loss,由loss调用反向传播,拿到所有损失还需要求和求均值,否则无法反向传播
首先要把我们的模型定义成一个类,而我们在构造模型的时候使用的都是这样一个模板,必须掌握这样的一个编写方式
class LinearModel(torch.nn.Module): //所有编写的模型都要记成Module,这里面有很多方法,要从这个模块里面把继承下来
//类里面至少要有两个函数,一个是init,属于构造函数,还有一个forward函数(必须叫这个),而module里面会根据计算图自动帮你实现反向传播过程,如果你觉得他的计算效率不高,你也可以用torch里面的一个function类来构造自己的计算方法
def __init__(self):
super(LinearModel,self).__init__() //调用父类的构造
self.Linear = torch.nn.Linear(1, 1) //torch.nn.Linear是torch里面的一个类,这里是构造一个对象,这里包含了权重和偏置
def forward(self,x):
y_pred = self.Linear(x) //这里表示实现一个可调用的对象
return y_pred
model1 = LinearModel()
这里给出class torch.nn.Linear的具体文档

这里的size表示维度,这里的bias是一个布尔类型,来决定你是否需要偏置量(默认是ture)
构造损失函数和优化器
criterion = torch.nn.MSELoss(size_average=False) //size.average表示最后是否需要求均值
optimizer = torch.optim.SGD(model1.parameters(),lr=0.01) //parameters可以把模型中所有的参数全部找出来,lr就是学习率,而这个optimizer,他就知道需要对哪些东西做优化
训练过程
for epoch in range(100):
y_pred = model1(x_data) //先算出y
loss = criterion(y_pred,y_data) //利用criterion算出损失函数
print(epoch, loss.item()) //打印出来
optimizer.zero_grad() //先梯度归零
loss.backward() //反向传播
optimizer.step() //更新参数
打印结果
print('w=', model.linear.weight.item())
print('b=', model.linear.bias.item())
x_test = torch.Tensor([[4.0]])
y_text = model(x_test)
print('y_pred=', y_text.data)
一开始给我报错

原来最上面X,Y赋值少了一对中括号,导致识别不出来
然后成功跑出!

输入4,1000次迭代输出7.9994,很不错了
然后我们修改一下,加一个数据4和8,然后输入10,训练2000次

帅的嘛不谈了!
完整代码如下:
import torch
x_data = torch.Tensor([[1.0], [2.0], [3.0], [4.0]])
y_data = torch.Tensor([[2.0], [4.0], [6.0], [8.0]])
class LinearModel(torch.nn.Module):
def __init__(self):
super(LinearModel, self).__init__()
self.linear = torch.nn.Linear(1, 1)
def forward(self, x):
y_pred = self.linear(x)
return y_pred
model = LinearModel()
criterion = torch.nn.MSELoss(size_average=False)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
for epoch in range(1000):
y_pred = model(x_data)
loss = criterion(y_pred, y_data)
print(epoch, loss.item())
optimizer.zero_grad()
loss.backward()
optimizer.step()
print('w=', model.linear.weight.item())
print('b=', model.linear.bias.item())
x_test = torch.Tensor([[10.0]])
y_text = model(x_test)
print('y_pred=', y_text.data)
打算修改步长再试试
后记:果然学习率设置过程就是炼丹
【项目实战】用Pytorch实现线性回归的更多相关文章
- 【项目实战】pytorch实现逻辑斯蒂回归
视频指导:https://www.bilibili.com/video/BV1Y7411d7Ys?p=6 一些数据集 在pytorch框架下,里面面有配套的数据集,pytorch里面有一个torchv ...
- 机器学习_线性回归和逻辑回归_案例实战:Python实现逻辑回归与梯度下降策略_项目实战:使用逻辑回归判断信用卡欺诈检测
线性回归: 注:为偏置项,这一项的x的值假设为[1,1,1,1,1....] 注:为使似然函数越大,则需要最小二乘法函数越小越好 线性回归中为什么选用平方和作为误差函数?假设模型结果与测量值 误差满足 ...
- [深度应用]·实战掌握PyTorch图片分类简明教程
[深度应用]·实战掌握PyTorch图片分类简明教程 个人网站--> http://www.yansongsong.cn/ 项目GitHub地址--> https://github.com ...
- 第24月第30天 scrapy《TensorFlow机器学习项目实战》项目记录
1.Scrapy https://www.imooc.com/learn/1017 https://github.com/pythonsite/spider/tree/master/jobboleSp ...
- Asp.Net Core 项目实战之权限管理系统(4) 依赖注入、仓储、服务的多项目分层实现
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- 给缺少Python项目实战经验的人
我们在学习过程中最容易犯的一个错误就是:看的多动手的少,特别是对于一些项目的开发学习就更少了! 没有一个完整的项目开发过程,是不会对整个开发流程以及理论知识有牢固的认知的,对于怎样将所学的理论知识应用 ...
- 【腾讯Bugly干货分享】React Native项目实战总结
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/577e16a7640ad7b4682c64a7 “8小时内拼工作,8小时外拼成长 ...
- Asp.Net Core 项目实战之权限管理系统(0) 无中生有
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- Asp.Net Core 项目实战之权限管理系统(2) 功能及实体设计
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
随机推荐
- HHL论文及代码理解(Generalizing A Person Retrieval Model Hetero- and Homogeneously ECCV 2018)
行人再识别Re-ID面临两个特殊的问题: 1)源数据集和目标数据集类别完全不同 2)相机造成的图片差异 因为一般来说传统的域适应问题源域和目标域的类别是相同的,相机之间的不匹配也是造成行人再识别数据集 ...
- 扩展-PageHelper分页插件
1.PageHelper 分页插件简介 1) PageHelper是MyBatis中非常方便的第三方分页插件 2) 官方文档: https://github.com/pagehelper/Mybati ...
- 常用Linux音译
su:Swith user 切换用户,切换到root用户 cat: Concatenate 串联 uname: Unix name 系统名称 df: Disk free 空余硬盘 du: Disk u ...
- VBA驱动SAP GUI完成界面元素值初始化
小爬日常利用VBA完成SAP GUI自动化时,经常被这个问题困扰:我们进入一个事务代码界面时,如FBL1N(供应商行项目显示),很多的 GuiTextField(文本框)对象.GuiCheckBox( ...
- P2512 【一本通提高篇贪心】「一本通 1.1 练习 6」[HAOI2008]糖果传递
[HAOI2008]糖果传递 题目描述 有 n n n 个小朋友坐成一圈,每人有 a i a_i ai 个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为 1 1 1. 输入格式 小朋友 ...
- HCNP Routing&Switching之DHCP中继
前文我们聊了下BFD相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16487842.html:今天来聊一聊DHCP中继相关话题: DHCP的作用 DH ...
- YII的延迟加载
类的映射表 use app\model\order \Yii::$classMap['app\models\Order'] = "D:\wamp\www\...\models\Order.p ...
- 羽夏看Linux内核——段相关入门知识
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你的,如有闲钱,可以打赏支持我的创作.如想转载,请把我的转载信息附在文章后面,并 ...
- Postman如何通过xmysql工具的Restful API 接口访问MySQL
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 导语 有时候用 Postman 接口测试需要获取MySQL的查询结果做接口输出的校验,这里介绍下 Postman 通过 R ...
- 3. 安装部署MGR集群 | 深入浅出MGR
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 目录 1. 安装准备 2. 初始化MySQL Server 3. 初始化MGR第一个节点 4. 继续设置另外两个节点 5. ...