PytorchAPI的使用及在GPU的使用和优化

API

调用API:和手动实现的思路是一样的。#1,#2这两个步骤是通用的步骤,相当于建立一个模型,之后你具体的数据直接丢进去就行了。只需要按着这样的样式打代码就行,死的东西,不需要你自己创造。

import torch
import torch.nn as nn
from torch.optim import SGD

#0 准备数据
x = torch.rand([500,1])
y_true = 3*x + 0.8

#1.定义模型
class MyLinear(nn.Module):
    def __init__(self):
        #继承父类的init
        super(MyLinear,self).__init__()
        self.linear = nn.Linear(1,1)

    def forward(self,x):
        out = self.linear(x)
        return out

#2.实例化模型,优化器类实例化,loss实例化
my_linear = MyLinear()
optimizer = SGD(my_linear.parameters(),0.001)
loss_fn = nn.MSELoss()

#3.循环,进行梯度下降,参数的更新
for i in range(20000):
    #得到预测值
    y_predict = my_linear(x)
    loss = loss_fn(y_predict,y_true)
    #梯度置为0
    optimizer.zero_grad()
    #反向传播
    loss.backward()
    #参数更新
    optimizer.step()

    if i%50==0:
        print(loss.item(),list(my_linear.parameters()))

可以看出已经很接近目标的数了

GPU版本

区别的地方:

1.

 2.

3.

代码:

import torch
import torch.nn as nn
from torch.optim import SGD

#定义一个device对象
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

#0 准备数据
x = torch.rand([500,1]).to(device)
y_true = 3*x + 0.8

#1.定义模型
class MyLinear(nn.Module):
    def __init__(self):
        #继承父类的init
        super(MyLinear,self).__init__()
        self.linear = nn.Linear(1,1)

    def forward(self,x):
        out = self.linear(x)
        return out

#2.实例化模型,优化器类实例化,loss实例化
my_linear = MyLinear().to(device)
optimizer = SGD(my_linear.parameters(),0.001)
loss_fn = nn.MSELoss()

#3.循环,进行梯度下降,参数的更新
for i in range(20000):
    #得到预测值
    y_predict = my_linear(x)
    loss = loss_fn(y_predict,y_true)
    #梯度置为0
    optimizer.zero_grad()
    #反向传播
    loss.backward()
    #参数更新
    optimizer.step()

    if i%50==0:
        print(loss.item(),list(my_linear.parameters()))

优化

 

 3介于1和2之间

4.动量法:(实时更新梯度,用之前的梯度和现在的梯度进行一个加权求和变为新的梯度)

mini-batch SGD算法虽然这种算法能够带来很好的训练速度,但是在到达最优点的时候并不能够总是真正到达最优点,而是在最优点附近徘徊。

另一个缺点就是mini-batch SGD需要我们挑选一个合适的学习率,当我们采用小的学习率的时候,会导致网络在训练的时候收敛太慢;当我们采用大的学习率的时候,会导致在训练过程中优化的幅度跳过函数的范围,也就是可能跳过最优点。我们所希望的仅仅是网络在优化的时候网络的损失函数有一个很好的收敛速度同时又不至于摆动幅度太大。

5和6都是实时改变学习率,用之前的学习率和现在的学习率进行加权求和,借此来更新学习率

7就是把学习率和梯度都进行更新

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL基础之锁

基本概念 锁是一种协调多个事务对同一数据并发访问的一种机制。它确保了数据库的一致性和完整性,防止多个事务同时修改一份数据导致冲突。 锁的类型 锁分为全局锁、表级锁、行级锁。全局锁会锁定整个数据库实例,使其处于只读状态;表级锁会在…

第7篇:全加器的Signal Tap调试

Q:上一篇里我们对全加器进行了功能仿真,这次我们用Quartus软件里的Signal Tap Logic Analyzer工具对全加器进行调试。 A:Signal Tap Logic Analyzer是Quartus Prime设计软件中自带的系统级调试工具,它可以在FPGA设计中采集和显示…

编译原理-实现识别标识符的词法分析器——沐雨先生

实验任务: 实现识别标识符的词法分析器 实验要求: 根据编译原理理论课教材中图2.3“标识符的转换图”,用C语言编写识别标识符的词法分析器,以文本文件为输入,控制台(或文件)输出识别出的每个…

目标检测——PP-YOLOE-R算法解读

PP-YOLO系列,均是基于百度自研PaddlePaddle深度学习框架发布的算法,2020年基于YOLOv3改进发布PP-YOLO,2021年发布PP-YOLOv2和移动端检测算法PP-PicoDet,2022年发布PP-YOLOE和PP-YOLOE-R。由于均是一个系列,所以放一起解…

java 封装

1、封装概述 (1)是面向对象三大特征之一(封装,继承,多态); (2)是面向对象编程语言对客观世界的模拟,客观世界里的成员变量都隐藏在对象内部,外界无法直接操作。通俗来说…

【zip密码】zip压缩包密码忘了,怎么办?

Zip压缩包设置了密码,解压的时候就需要输入正确对密码才能顺利解压出文件,正常当我们解压文件或者删除密码的时候,虽然方法多,但是都需要输入正确的密码才能完成。忘记密码就无法进行操作。 那么,忘记了zip压缩包的密…

Verilog刷题笔记39

题目:Create a 100-bit binary adder. The adder adds two 100-bit numbers and a carry-in to produce a 100-bit sum and carry out. 解题: module top_module( input [99:0] a, b,input cin,output cout,output [99:0] sum );wire [99:0]cc;assign …

【倪琴膝琴鉴赏】倪诗韵古琴小膝琴

此琴无论是材料还是做工,都很不错。琴体小巧精致,形制优美,边缘线条流畅有活力,各部位比例匀称,制作精当,真是美得不可方物,难得的形音俱佳之作。不愧为倪老师的代表作品——伏羲。 古人为了出行…

webpack5零基础入门-5使用webpack处理stylus文件

1.需要下载一个包 npm i stylus-loader 2.功能介绍 stylus-loader:负责将stylus文件编译成css文件 3.配置: const path require(path);//nodejs用来处理路径问题的模块module.exports {/**入口 */entry: ./src/main.js,/**输出 相对路径*/output: {/**文件输…

(vue)Module Error (from ./node_modules/eslint-loader/index.js)

(vue)Module Error (from ./node_modules/eslint-loader/index.js) 方法1:直接关闭eslint // vue.config.js module.exports {lintOnSave: false, //关闭eslint语法检查...... }方法2: 参考:解决参考 解决参考:如何修复vue-cli…

香港科技大学(广州)先进材料学域可持续能源与环境学域智能制造学域博士招生宣讲会——北京专场(暨全额奖学金政策)

三个学域代表教授亲临现场,面对面答疑解惑助攻申请!可带简历现场咨询和面试! 💰一经录取,享全额奖学金1.5万/月! 报名链接: https://www.wjx.top/vm/wF2Mant.aspx# 地点:中关村皇冠…

【进阶五】Python实现SDVRP(需求拆分)常见求解算法——差分进化算法(DE)

基于python语言,采用经典差分进化算法(DE)对 需求拆分车辆路径规划问题(SDVRP) 进行求解。 目录 往期优质资源1. 适用场景2. 代码调整3. 求解结果4. 代码片段参考 往期优质资源 经过一年多的创作,目前已经成…

Transformer的前世今生 day01(预训练、统计语言模型)

预训练 在相似任务中,由于神经网络模型的浅层是通用的,如下图: 所以当我们的数据集不够大,不能产生性能良好的模型时,可以尝试让模型B在用模型A的浅层基础上,深层的部分自己生成参数,减小数据集…

【NLP学习记录】One-Hot编码

1. One-Hot编码概念 one-hot编码的基本思想是将每个类别映射到一个向量,其中只有一个元素的值为1,其余元素的值为0。这样,每个类别之间相互独立,不存在顺序或距离关系。 举例:对于三个类别的情况,可以使用…

【LIMS】微服务

目录 一、服务解决方案-Spring Cloud Alibaba1.1选用原因(基于Spring Cloud Alibaba的试用场景)1.2 核心组件使用前期规划 部署 nacos部署 mino使用JavaFreemarker模板引擎,根据XML模板文件生成Word文档使用JavaFlowable 工作流引擎前端 -vue…

信息发布系统

特色功能 画布功能---可任意拖动各控件的播放位置及大小,可任意选择屏幕背景色或添加背景图 同步联屏---毫秒级同步功能 视频切换无黑屏 触摸查询系统 会议预定系统 终端显示-会议综合屏 终端显示-会议预定屏 终端显示-移动端 广告发布系统 硬件产品-智能终端 硬件…

Codeforces Round 933(Div.3) A~F

A.Rudolf and the Ticket(暴力) 题意: 鲁道夫要去拜访伯纳德,他决定乘坐地铁去找他。车票可以在接受两个硬币的机器上购买,这两个硬币的总和不超过 k k k。 鲁道夫有两个装硬币的口袋。左边口袋里有 n n n枚面值为 …

有问有答开源问答平台网站源码系统 带完整的安装代码包以及搭建教程

在当前的信息爆炸时代,用户对于高效、精准地获取信息的需求日益强烈。问答平台以其独特的互动形式,能够为用户提供更加直接、实用的信息解答。然而,市场上的问答平台大多存在功能单一、定制化程度低等问题,难以满足用户多样化的需…

抖音无水印视频关键词批量下载|视频下载工具

抖音无水印视频关键词批量下载操作说明 我们根据自己的需要开发了抖音视频批量下载工具,现在市面上的视频无水印工具只能通过单个视频链接进行提取,太不方便 所以我们延伸出了 不仅可以通过单个视频链接进行提取也可通过关键词进行视频搜索 进行批量和有…

tsn交换机应用场景

TSN交换机应用场景 随着工业互联网的快速发展,越来越多的工业设备需要进行互联互通,并实现实时通信和数据传输。而传统的以太网交换机在满足工业互联网需求方面存在一定的局限性,因此,TSN(时钟同步网络)交换…