pytorch应用(入门2) 一维线性回归

news2024/9/30 5:39:58

目录

  • nn.Module(模组)
  • torch.optim (优化)
  • 模型的保存和加载
  • 一维线性回归
    • 代码如下:
    • 均方差损失函数nn.MSELoss()
    • model.parameters()的理解与使用
    • torch.autograd.Variable
    • optimizer.zero_grad()
    • model.eval的作用
  • 深度学习方法——pytorch下GPU与CPU调用的切换
  • 看一下各个变量

nn.Module(模组)

在这里插入图片描述
nn.Linear是线性层
在这里插入图片描述

torch.optim (优化)

这是一个实现各种优化算法的包。

在调用的时候将需要优化的参数传人,这些参数都必须是Variable, 然后传入一些基本的设定,比如学习率动量等。

举个例子:

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

在这里插入图片描述

看到这里,如果代码不太懂的可能有点懵,不过深度学习的代码就是这样,分几个层次来构建一个完整的模型。

模型的保存和加载

两种方式,各有各的不同之处。
在这里插入图片描述

一维线性回归

深度学习的一层神经网络呗(粗略地这样认为是可以的)
至于总的线性模型的式子其实其他教程上都有:
在这里插入图片描述
在代码实现的过程中我又又报错了,然后我心平气和地去找改错的博文,thistorch踩坑

改完错误的我,真的是高兴呢!,书中作者的代码不知道是哪年的,自己敲的时候没报错,我敲的时候就报错了,根据报错信息来看,应该是版本不一样导致的语法修改。

%notebook的魔法命令

代码如下:

import torch
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
import torch.nn as nn
x_train = np.array([[3.3],[4.4], [5.5], [6.71], [6.93], [4.168],
[9.779],[6.182], [7.59], [2.167], [7.042] ,
[10.791],[5.313], [7.997], [3.1]], dtype=np.float32)

y_train = np.array([[1.7], [2.76], [2.09], [3.19], [1.694], [1.573],
[3.366], [2.596], [2.53], [1.221], [2.827],
[3.465],[1.65], [2.904], [1.3]], dtype=np.float32)

plt.scatter(x_train, y_train)
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xiE4uoRZ-1672389303002)(output_2_0.png)]

#转化成张量Tensor,否则没法用库函数,这一步也就是把数据准备好
x_train = torch.from_numpy(x_train)
y_train = torch.from_numpy(y_train)
#构造线性模型
class LinearRegression(nn.Module):
    def __init__(self):
        super(LinearRegression,self).__init__()
        self.linear = nn.Linear(1,1) # input and output is 1 dimension
    def forward(self, x) :
        out = self.linear(x)
        return out
if torch.cuda.is_available() :
    model = LinearRegression().cuda()
else:
    model=LinearRegression() 

LinearRegression(
  (linear): Linear(in_features=1, out_features=1, bias=True)
)
# 定义损失函数和优化函数
#这里使用梯度下降
criterion = nn.MSELoss() #在这里定义的损失函数,然后可以把criterion当作函数来使用,相当于C++的函数指针 了
optimizer = torch.optim.SGD(model.parameters(),lr=1e-3) # 与上句同理

from torch.autograd import Variable # torch 中 Variable 模块

num_epochs = 1000
for epoch in range(num_epochs) :
    if torch.cuda.is_available() :
        inputs = Variable(x_train).cuda()
        target = Variable(y_train).cuda()
    else:
        inputs = Variable(x_train)
        target = Variable(y_train)
        
    # forward
    out = model(inputs) # 将输入的数值输入到线性模型中进行计算,计算完的输出保存在out变量中。在class LinearRegression(nn.Module)中最后return的也是out
    loss = criterion(out, target) # 计算损失
    
    # backward
    optimizer.zero_grad() # 清空过往梯度
    loss.backward() # 反向传播,计算当前梯度
    optimizer.step() # 根据梯度更新网络参数
    
    if (epoch+1)%20 == 0: # 网络上很炫的训练过程可视化就是这样朴实无华
        print('Epoch[{}/{}], loss: {:.6f}'.format(epoch+1, num_epochs, loss.data))

Epoch[20/1000], loss: 0.376377
Epoch[40/1000], loss: 0.374250
Epoch[60/1000], loss: 0.372151
Epoch[80/1000], loss: 0.370074
Epoch[100/1000], loss: 0.368018
Epoch[120/1000], loss: 0.365983
Epoch[140/1000], loss: 0.363968
Epoch[160/1000], loss: 0.361975
Epoch[180/1000], loss: 0.360001
Epoch[200/1000], loss: 0.358048
Epoch[220/1000], loss: 0.356115
Epoch[240/1000], loss: 0.354201
Epoch[260/1000], loss: 0.352307
Epoch[280/1000], loss: 0.350433
Epoch[300/1000], loss: 0.348578
Epoch[320/1000], loss: 0.346741
Epoch[340/1000], loss: 0.344924
Epoch[360/1000], loss: 0.343124
Epoch[380/1000], loss: 0.341344
Epoch[400/1000], loss: 0.339581
Epoch[420/1000], loss: 0.337837
Epoch[440/1000], loss: 0.336110
Epoch[460/1000], loss: 0.334401
Epoch[480/1000], loss: 0.332710
Epoch[500/1000], loss: 0.331035
Epoch[520/1000], loss: 0.329378
Epoch[540/1000], loss: 0.327738
Epoch[560/1000], loss: 0.326115
Epoch[580/1000], loss: 0.324508
Epoch[600/1000], loss: 0.322917
Epoch[620/1000], loss: 0.321343
Epoch[640/1000], loss: 0.319785
Epoch[660/1000], loss: 0.318243
Epoch[680/1000], loss: 0.316717
Epoch[700/1000], loss: 0.315206
Epoch[720/1000], loss: 0.313711
Epoch[740/1000], loss: 0.312231
Epoch[760/1000], loss: 0.310766
Epoch[780/1000], loss: 0.309316
Epoch[800/1000], loss: 0.307881
Epoch[820/1000], loss: 0.306460
Epoch[840/1000], loss: 0.305054
Epoch[860/1000], loss: 0.303663
Epoch[880/1000], loss: 0.302286
Epoch[900/1000], loss: 0.300922
Epoch[920/1000], loss: 0.299573
Epoch[940/1000], loss: 0.298237
Epoch[960/1000], loss: 0.296916
Epoch[980/1000], loss: 0.295607
Epoch[1000/1000], loss: 0.294312
# 训练完就该预测了(这里就是一维线性模型,很简单,没啥其他的步骤)
%matplotlib notebook

model.eval()
model.cpu() # 修改为CPU调用
predict = model(Variable(x_train))  #调用训练好的模型,然后将模型的输出用predict保存
predict = predict.data.numpy()

#看一下拟合效果
plt.plot(x_train.numpy(), y_train.numpy(),'ro', label='Original data')
plt.plot(x_train.numpy(), predict, label='Fitting Line')
plt.show()

<IPython.core.display.Javascript object>

大家注意看我的代码都是由哪几部分组成的,构建深度学习项目其实就是大概的几部分了。

然后咱们要学精,得看一看这些语法有没有可以深究的。

首先就是导入包,为了避免语法错误最好一开始就导入。

均方差损失函数nn.MSELoss()

nn.MSELoss(),当输入两个矩阵时,默认输出标量tensor(torch.Size([])),是两个矩阵对应位置平方差后的平均值

model.parameters()的理解与使用

model.parameters()保存的是Weights和Bais参数的值。

torch.autograd.Variable

是Autograd的核心类,它封装了Tensor,并整合了反向传播的相关实现(tensor变成variable之后才能进行反向传播求梯度?用变量.backward()进行反向传播之后,var.grad中保存了var的梯度)

Varibale包含三个属性:

data:存储了Tensor,是本体的数据
grad:保存了data的梯度,本事是个Variable而非Tensor,与data形状一致
grad_fn:指向Function对象,用于反向传播的梯度计算之用

optimizer.zero_grad()

传统的训练函数,一个batch是这么训练的:
简单的说就是进来一个batch的数据,计算一次梯度,更新一次网络

model.eval的作用

训练完train_datasets之后,model要来测试样本了。在model(test_datasets)之前,需要加上

model.eval()

否则的话,有输入数据,即使不训练,它也会改变权值。
这是model中含有batch normalization层所带来的的性质。
在做one classification的时候,训练集和测试集的样本分布是不一样的,尤其需要注意这一点。

深度学习方法——pytorch下GPU与CPU调用的切换

这篇博文值得一看

看一下各个变量

在这里插入图片描述

#访问模型和优化器
print('模型的sate_dict:')
print(model.state_dict().keys())
for param_tensor in model.state_dict():
  print(param_tensor,'\t',model.state_dict()[param_tensor].size())
print('优化器的state_dict:')
for var in optimizer.state_dict():
  print(var,'\t',optimizer.state_dict()[var])



#保存和加载模型
path='model.pt'
torch.save(model.state_dict(),path)

model2=LinearRegression()
#加载
device=torch.device('cpu')#在cpu上保存
# device=torch.device('cuda')#在GPU上保存

model2.load_state_dict(torch.load(path,map_location=device))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/128692.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何设计一个好的工业产品?

许多人不知道工业设计的本质是什么?与工业设计相比&#xff0c;其本质是解决消费群体的相关问题&#xff0c;实现消费者的需求&#xff0c;使客户更容易选择。但是如何设计一个好的工业产品呢? 1.更加科学合理地摆脱困境 产品设计必须开拓进取。它应该能够引领时代潮流&#…

基础数学复习(2)——插值

文章目录插值和拟合的区别&#xff08;了解&#xff09;拉格朗日插值&#xff08;必考&#xff09;插值余项说不定会考的证明题拉格朗日插值缺点和适用范围&#xff08;了解&#xff09;牛顿插值&#xff08;必考&#xff09;推导差商的性质&#xff08;会考&#xff09;——通…

Java语法五:锁策略以及CAS

目录 1.常见的锁策略 2&#xff1a;Synchronized原理 2.1&#xff1a;加锁工作工程 2.2:其他的优化操作 2.2.1&#xff1a;锁消除 2.2.2&#xff1a;锁粗化 3.CAS 3.1&#xff1a;实现原子类 3.2&#xff1a;CAS中的ABA问题 3.2.1&#xff1a;什么是ABA问题 3.2.2&am…

【JavaScript】俄罗斯方块简单网页版

文章目录js制作简单网页版俄罗斯方块效果演示设计思路一、HTML网页结构代码二、CSS代码三、JS代码四、代码资源分享js制作简单网页版俄罗斯方块 程序虽然很难写&#xff0c;却很美妙。要想把程序写好&#xff0c;需要写好一定的基础知识&#xff0c;包括编程语言、数据结构与算…

在mac上搭建php的SNMP开发环境

前言 最近需要开发AC的snmp协议&#xff0c;需要开启php的snmp扩展&#xff0c;网上能搜索到的主要还是windows和centos下面的几篇资料。这里主要介绍下mac系统下如何搭建php的snmp开发环境。 第一步&#xff0c;安装php&#xff1a; 首先需要在mac上面安装PHP&#xff0c;这…

重点物联网漏洞利用情况

重点物联网 漏洞利用情况本节我们选取了两个漏洞进行分析。UPnP 相关的漏洞我们将在 4.4.3 进行分析&#xff0c;除去 UPnP 相关漏 洞外&#xff0c;被利用最多的是 Eir D1000 路由器的一个漏洞 [44]&#xff08;CVE-2016-10372&#xff09;&#xff0c;我们将对其进行分析。 …

第006课 - 使用vagrant快速创建linux虚拟机

使用vagrant快速创建linux虚拟机 项目中使用的环境,都是装在linux当中的,我们可以使用linux虚拟机。 https://www.virtualbox.org/ 直接双击进行安装运行。 CPU开启虚拟化 virtualbox安装需要我们的cpu开启虚拟化。 这个需要设置主板。 在开机启动的时候,找到cpu配置:…

什么是金手指,金手指的设计要求有哪些?

金手指&#xff08;connecting finger&#xff09;是电脑硬件如&#xff1a;&#xff08;内存条上与内存插槽之间、显卡与显卡插槽等&#xff09;&#xff0c;所有的信号都是通过金手指进行传送的。金手指由众多金黄色的导电触片组成&#xff0c;因其表面镀金而且导电触片排列如…

阿里云主要产品架构介绍

文章目录前言主要产品云产品访问拓扑ECS架构RDS架构OCS架构SLB架构OSS架构OTS架构ODPS架构SLSSLS的产品视角SLS运维视角OAS结语前言 阿里云产品众多&#xff0c;基本涵盖了从存储到计算到网络的方方面面&#xff0c;当然还包括大数据和人工智能。这些产品&#xff0c;共同组成…

响应式原理 之 vue2 vue3

目录 一、响应式概念 二、响应式函数的实现 watchFn 三、响应式依赖的收集 四、监听对象的变化 1. vue2 2. vue3 五、对象的依赖管理 1. 图解 2. 代码 六、响应式完整代码 一、响应式概念 m有一个初始化的值&#xff0c;有一段代码使用了这个值那么在m有一个新的值时…

热门探讨丨SaaS软件是否正在“毁掉”数字化转型企业?

——当它浮出水面&#xff0c;才能看到水下的错落。 截至2021年末&#xff0c;我国企业的数量达到4842万户&#xff0c;增长1.7倍&#xff0c;其中99%以上都是中小企业。 根据调查&#xff0c;在数字化转型浪潮中&#xff0c;我国有超过70%的企业对数字化转型处于积极态度&am…

网络部署运维实验(pat 端口映射含命令)

♥️作者&#xff1a;小刘在这里 ♥️每天分享云计算网络运维课堂笔记&#xff0c;疫情之下&#xff0c;你我素未谋面&#xff0c;但你一定要平平安安&#xff0c;一 起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的&#xff0c;绽放&#xff0c;…

Vue JSX 上手指南

JSX 简介 JSX Javascript XML。在 Javascript 里写 XML&#xff0c;同时拥有 Javascript 的灵活性和 HTML 的语义化。 Template vs JSX template 是 Vue 的默认写法&#xff0c;也更推荐。因为 template 语法是固定的&#xff0c;Vue 在编译层面为它做了很多静态标记的优化…

MySQL简介及常用引擎介绍

MySQL 由 My 和 SQL 组成&#xff0c;其中的 SQL 部分即为&#xff1a;Structured Query Language&#xff0c;意为结构化查询语⾔&#xff0c;是访问数据库的最常⻅的标准化语⾔。 MySQL 是一款优秀的、开源的数据库管理系统&#xff0c;同时 MySQL 也是一款可移植的数据库&a…

【WSL】[02] windows subsytem linux 配置和使用

第【2】章前言&#xff1a; 上一篇我们已经安装好了ubuntu在WSL下的GUI的桌面&#xff1a;我们现在继续进一步进行配置工作。同时也把&#xff0c;运用WSL的流程摸一把&#xff0c;以备后用。 1 在windows的PowerShell终端进行配置和查询&#xff1a; 1.1 查询所有支持的可以…

极小尺寸,超低功耗,高度集成,天翼物联NB-IoT云芯模组

数字经济时代&#xff0c;物联网已融入我们的日常生活。比如&#xff0c;智能抄表代替人工上门抄表&#xff0c;运动手环实时传输心率情况&#xff0c;烟感报警器远程告警……这些高科技背后都有一颗小而强大的芯片在支撑。 天翼物联云芯模组依托天翼物联网平台&#xff08;AIo…

制造业项目管理软件如何帮助企业做好项目管理?

项目产品、采购、销售、BOM变更管理不全面&#xff1b; 项目进度追踪管理难&#xff1b; 项目进度款管不清、项目尾款管不到&#xff1b; … … 而以上仅仅是生产制造企业所面临的项目管理问题的“冰山一角”。 采用“项目制”生产模式的制造企业&#xff0c;需要做到项目…

理解XaaS(SaaS、Baas、Paas、Iaas)

XaaS : XX as a Service 参考原文 以电商来举例 一套电商系统需要的开发资料 产品经理&#xff1a;设计电商系统 前端工程师&#xff1a;开发页面 后端工程收&#xff1a;开发后端 运维工程师&#xff1a;搭建环境&#xff0c;部署到服务器&#xff0c;负责后期维护等 服务器…

指南解读:急性心力衰竭中国急诊管理指南(2022)

心力衰竭&#xff08;heart failure&#xff0c;HF 简称心衰&#xff09;是由于心脏结构和 / 或功能异常导致心室充盈和/或射血能力受损的一组临床综合征&#xff0c;其病理生理学特征为肺淤血和/或体循环淤血、伴或不伴有组织器官低灌注&#xff0c;主要临床表现为呼吸困难、乏…

美容门店信息化管理系统该如何搭建?不妨参考一下百数

随着人们的生活水平越来越高&#xff0c;人们在解决了温饱问题之后有了更多的追求。其中美容正在成为不少人新的必做项目&#xff0c; 迎合了人们对于爱美的需求。目前我国美容机构市场规模已超过4500亿元&#xff0c;行业从业人员超过3000万。据国家工商联统计数字显示&#x…