《PyTorch深度学习实战》学习小结

news2025/1/21 7:22:32

前言

PyTorch是Facebook发布的一款非常具有个性的深度学习框架,它和Tensorflow,Keras,Theano等其他深度学习框架都不同,它是动态计算图模式,其应用模型支持在运行过程中根据运行参数动态改变,而其他几种框架都是静态计算图模式,其模型在运行之前就已经确定。

PyTorch安装

简易安装

pip install numpy
pip install scipy
pip install  http://download.pytorch.org/whl/cu75/torch-0.1.12.post2-cp27-none-linux_x86_64.whl

指定版本安装

基础变量

Tensor 基本的数据结构

  • pytorch 中的数据都是封装成 Tensor 来引用的,
  • Tensor 实际上就类似于 numpy 中的数组,两者可以自由转换。
import torch
x = torch.Tensor(3,4)
print("x Tensor: ",x)

Variable 基本的变量结构

  • Variable变量包含了数据和数据的导数两个部分
  • x.data 是数据,这里 x.data 就是 Tensor。x.grad 是计算过程中动态变化的导数。
import torch
from torch.autograd import Variable
x=Variable(torch.Tensor(2,2))
print("x variable: ",x)

求导

  • 数学上求导简单来说就是求取方程式相对于输入参数的变化率
  • 求导的作用是用导数对神经网络的权重参数进行调整
  • Pytorch 中为求导提供了专门的包,包名叫 autograd。如果用 autograd.Variable 来定义参数,则 Variable 自动定义了两个变量,data 代表原始权重数据;而 grad 代表求导后的数据,也就是梯度。每次迭代过程就用这个 grad 对权重数据进行修正。
import torch
from torch.autograd import Variable
x = Variable(torch.ones(2, 2), requires_grad=True)
print(x)
y=x+2
print(y)
z = y * y * 3
out = z.mean()
print(z, out)
out.backward()  # backward 就是求导的意思
print(x.grad)

 z=(x+2)*(x+2)*3,它的导数是 3*(x+2)/2,
 当 x=1 时导数的值就是 3*(1+2)/2=4.5

如何用导数来修正梯度

权值更新方法:learning_rate 是学习速率,多数时候就叫做 lr,是学习步长,用步长 * 导数就是每次权重修正的 delta 值,lr 越大表示学习的速度越快,相应的精度就会降低。

weight = weight + learning_rate * gradient

learning_rate = 0.01
for f in model.parameters():
    f.data.sub_(f.grad.data * learning_rate)

损失函数

  • 损失函数是指用于计算标签值和预测值之间差异的函数,在机器学习过程中,有多种损失函数可供选择,典型的有距离向量,绝对值向量等。
  • pytorch 中定义了很多类型的预定义损失函数,
  • 也支持自己自定义loss function
import torch
from torch.autograd import Variable
import torch.nn as nn
import torch.nn.functional as F
sample = Variable(torch.ones(2,2))
a=torch.Tensor(2,2)
a[0,0]=0
a[0,1]=1
a[1,0]=2
a[1,1]=3
target = Variable (a)

sample 的值为:[[1,1],[1,1]]
target 的值为:[[0,1],[2,3]]

nn.L1Loss

  • L1Loss 计算方法很简单,取预测值和真实值的绝对误差的平均数即可
    在这里插入图片描述
criterion = nn.L1Loss()
loss = criterion(sample, target)
print(loss)

loss = (|0-1|+|1-1|+|2-1|+|3-1|) / 4 = 1

nn.SmoothL1Loss

  • SmoothL1Loss 也叫作 Huber Loss,误差在 (-1,1) 上是平方损失,其他情况是 L1 损失。
    在这里插入图片描述
criterion = nn.SmoothL1Loss()
loss = criterion(sample, target)
print(loss)
loss = 0.625

nn.MSELoss

  • 均方误差,预测值和真实值之间的平方和的平均数
    在这里插入图片描述
criterion = nn.MSELoss()
loss = criterion(sample, target)
print(loss)
loss = 1.5

nn.BCELoss

  • 二分类用的交叉熵
    在这里插入图片描述
criterion = nn.BCELoss()
loss = criterion(sample, target)
print(loss)
loss = -13.8155

nn.CrossEntropyLoss

  • 交叉熵损失函数 注意维度
    在这里插入图片描述

优化器

TODO

  • PyTorch的动态计算图模式指的是什么,与其他框架的静态计算图模式有什么差异?

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

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

相关文章

【Mysql】内置函数

文章目录内置函数日期函数字符串函数数学函数其他函数内置函数 内置函数一般放在SQL语句里帮助我们执行一些逻辑. 日期函数 函数名称描述current date()获取当前日期current time()获取当前时间current_timestamp()获取当前时间戳date(datetime)返回 datetime 参数的日期部分…

Unity演示Leetcode开香槟过程

文章目录Unity演示Leetcode开香槟过程示意图一:示意图二(速度变为上图的5倍)主要步骤与难点C#脚本代码:香槟杯子液体页面变化以及杯子边缘的绘画Shader代码杯子边缘液体流出的效果的Shader代码:Unity演示Leetcode开香槟…

shell中的printf实践:美颜的九九乘法表

一 简介 Linux系统中除了echo命令可以输出信息,还可以使用printf命令实现相同的效果。功能描述:printf命令可以格式化输出数据。printf命令的语法格式如下。 printf [格式] 参数 常用的格式字符串及功能描述下表: 应用案例: 输出…

配置anaconda环境变量

conda环境变量的配置配置环境变量找到anaconda安装位置打开环境变量配置设置输入python命令跳入商店问题总结配置环境变量 找到anaconda安装位置 首先下载好conda环境,例如我下载在D盘 打开环境变量配置设置 可以按winS进入搜索框,输入环境变量&…

PyQt5学习笔记--摄像头实时视频展示、多线程处理、视频编解码

目录 1--前言 2--基于Qt Designer设计ui文件 3--视频的编解码操作 4--完整代码 5--结果展示 6--存在的问题 7--参考 1--前言 ① 创建两个线程,主线程为ui线程,子线程用于读取摄像头视频,将处理后的图像帧数据(处理操作可以…

开放域类型发现:Open Relation and Event Type Discovery with Type Abstraction

1 什么是type discovery? “relation discovery” (Yao et al., 2011; Marcheggiani and Titov, 2016),“open relation extraction” (Wu et al., 2019; Hu et al., 2020) and “event type induction” (Huang and Ji, 2020; Shen et al., 2021). In this paper, we unify …

[项目](美多商城)(数据库课设/软件工程大作业/软件工程课设)项目的创建、配置、说明文档与源码

文章目录💘 相关说明💘 美多商城前台前端项目创建与配置💖 项目的创建💖 配置UI组件库💝 安装💝 全局引入与全局注册💝 局部引入与局部注册💝 定制主题💖 配置axios&…

【并发】Java并发线程池底层原理详解与源码分析(上)

【并发】Java并发线程池底层原理详解与源码分析(上) 线程池与线程对比 使用线程的方式运行 使用线程池的方式运行 分析 单线程、多线程、线程池效率问题 详细代码 结果分析 单线程为什么是最快的? 单线程都这么快了,我…

第四周 牛背山云海——拍拍大场景,自拍延时片段

目录4.1 面对广阔云海拍张全景照片,再来一组延时片段4.2 认识镜头滤镜4.3 补充技术基础知识:白平衡、色温4.4 小博士课堂——延时摄影课件4.1 面对广阔云海拍张全景照片,再来一组延时片段 云海 雪山 雅安境内的牛背山拍摄云海 牛背山可以看到…

java刷题day 04

一. 单选题: 解析:队列:先到先服务解析:final不能修饰接口,成员变量可以用final修饰 解析: A: 算法是指解题方案的准确而完整的描述,算法不等于程序,也不等于计算方法 BC…

Linux 时间同步 ntpdchrony 内网

Linux 时间同步 ntpd&chrony 在任何服务器集群中,为了更好的协同工作,除了一些互信机制外,需要的就是时间同步功能,如果时间不同步,就好比让在中国的同事与美国的同事进行沟通,会造成各种奇奇怪怪的时…

excel笔记

1.快速填充 当需要提取出电子邮件里的名称,可以在第一行里手动输入Nancy后,直接按快捷键ctrl e进行快速填充,可以直接获得预期数据 如果不用快捷键,也可以点击指定位置的图标,实现这一功能 快速填充不仅可以将进行…

大数据中的R语言——中国大学MOOC课程笔记

第一章 R语言简介 1.1 简介 R的特性: • 免费的 • 一个全面的统计研究平台 • 拥有顶尖水准的制图功能 • 一个可进行交互式数据分析和探索的强大平台 • 轻松地从各种类型的数据源导入数据,包括文本文件、数据库管理系统、统计软件,乃…

rabbitMQ 消息顺序性、消息幂等性、消息不丢失、最终一致性、补偿机制、消息队列设计

一、消息顺序性 消息队列中的若干消息如果是对同一个数据进行操作,这些操作具有前后的关系,必须要按前后的顺序执行,否则就会造成数据异常。 举例:   比如通过mysql binlog进行两个数据库的数据同步,由于对数据库的…

内存和函数

程序的内存布局 Linux默认情况下将高地址的1GB空间分配给内核,用户进程使用剩下2GB或者3GB的内存空间。在用户空间里,也有很多地址区间有特殊的地位,一般来讲,应用程序使用的内存空间里有如下"默认"的区域 1、栈&#…

疫情可视化part2

前言 这是疫情可视化最开始的文章,有需要了解的可前往查看:https://blog.csdn.net/xi1213/article/details/126824752。 本来说有时间就把这个项目完结了的,结果后面一直有事拖着,直到现在十一月份了才搞完。老样子,先…

F1. 生活在树上(easy version)树,dfs

题目链接 F1. 生活在树上(easy version) 题目背景 本题是 B 组的最后一题,是 F2 题的简单版本,两道题目的解法略有不同。本题和 F2 题在题意上的区别在于本题给定树上的边权,而不是点权。 小智生活在「传智国」&am…

汽车 Automotive > SOME/IP VS DDS调研和未来方向

参考:JASPAR, General incorporated association:What is the conqueror in the SOA platform for the future in-vehicle networks? 目录 SOME/IP介绍参考 DDS介绍 SOME/IP VS DDS 研究方向 SOME/IP介绍参考 汽车Automotive > SOME/…

MAC安全(防MAC泛洪攻击)

一、MAC地址表项分类: 1.1 动态表项:通过对帧内的源MAC进行学习而来,有老化时间 1.2 静态表项:由管理员手工配置,不会老化 1.3 黑洞表项:丢弃特定源MAC或目的MAC,不会老化 静态和黑洞表项不会被动态表项…

类与对象(下篇)

类与对象(下)再谈构造函数回顾构造函数初始化列表explicit 关键字拷贝构造函数也具有初始化列表友元 friend友元函数输入输出流的重载友元类static 成员内部类再谈构造函数 回顾构造函数 在上一篇博客中提到了构造函数,构造函数其主要目的是…