【项目实战】用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 项目实战之 ...
随机推荐
- .Net 应用考虑x64生成
在x86架构下使用32位应用程序,理论上32位能够分配4G的大小空间,但实际上默认 .NET Framework 可以创建一个不超过 2 GB 的对象,在实际使用过程中可能使用到1.5G的样子就会报内 ...
- 数论之欧几里德gcd
序:这篇博客我最开始学的时候写的,后来又学了一遍,自我感觉这篇好像有问题,扩展欧几里得建议走这边 首先先说,欧几里德一共有俩,欧几里德和扩展欧几里德,前者非常简单,后者直接变态(因为我太菜) gcd ...
- 5-12 Kafka 消息队列
消息队列(Message Queue) 软件下载 软件下载 MQ_Blog Dubbo远程调用的性能问题 Dubbo调用在微服务项目中普遍存在 这些Dubbo调用都是同步的 "同步" ...
- Linux下IPC之共享内存的使用方法
基本参考 <Unix环境高级编程>第14.9节共享内存来学习. 参考blog:https://blog.csdn.net/weixin_45794138/article/details/1 ...
- Keep In Line_via牛客网
题目 链接:https://ac.nowcoder.com/acm/contest/28537/H 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语 ...
- HtmlAgilityPack中使用xpath获取属性值
HtmlAgilityPack介绍 HtmlAgilityPack是一个专门用来解析Html的库,它可以使用xml的方式来解析html. 有人说了,html本身不就是xml?是的,html就是xml, ...
- javascript相邻节点元素获取
<script> window.onload = function () { var myLinkItem = document.getElementById('linkItem'); v ...
- odoo 14 Debug 调试
1 # PDB的用法 2 # PDB是用来调试运行代码的. 3 # 如何启动PDB(启动之后你可以调用odoo任何模块中的方法) 4 # ./odoo-bin shell --log-level=de ...
- 论文翻译:2022_Time-Frequency Attention for Monaural Speech Enhancement
论文地址:单耳语音增强的时频注意 引用格式:Zhang Q, Song Q, Ni Z, et al. Time-Frequency Attention for Monaural Speech Enh ...
- 技术分享 | 简单测试MySQL 8.0.26 vs GreatSQL 8.0.25的MGR稳定性表现
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. M ...