PyTorch 导数应用的使用教程
前言
由于机器学习的基本思想就是找到一个函数去拟合
样本数据分布,因此就涉及到了梯度
去求最小值
,在超平面我们又很难直接得到全局最优值,更没有通用性,因此我们就想办法让梯度沿着负方向下降,那么我们就能得到一个局部或全局的最优值了,因此导数就在机器学习中显得非常重要了
基本使用
tensor.backward()
可以及自动将梯度累加积到tensor.grad
上
x = torch.ones(3,3) print(x.requires_grad) x.requires_grad_(True) print(x.requires_grad) y = x**2/(x-2) out = y.mean() print(x.grad) out.backward() print(x.grad)
False
True
None
tensor([[-0.3333, -0.3333, -0.3333],
[-0.3333, -0.3333, -0.3333],
[-0.3333, -0.3333, -0.3333]])
requires_grad
可以获取到tensor
是否可导
requires_grad_()
可以设置tensor
是否可导
grad
查看当前tensor
导数
上面的公式很简单,程序含义
1/4 * (x**2) / (x-2)
求x的导数,基本公式在下方
注意点
我们使用.mean
后得到的是标量
,如果不是标量
会报错
x = torch.ones(3, requires_grad=True) y = x * 2 y = y * 2 print(y)
tensor([4., 4., 4.], grad_fn=<MulBackward0>)
y.backward() print(x.grad)
报错
RuntimeError: grad can be implicitly created only for scalar outputs
v = torch.tensor([0.1, 1.0, 0.0001], dtype=torch.float) y.backward() print(x.grad)
tensor([4.0000e-01, 4.0000e+00, 4.0000e-04])
no_grad()
作用域
如果想要某部分程序不可导那么我们可以使用这个
x = torch.ones(3, requires_grad=True) y = x * 2 print(y.requires_grad) with torch.no_grad(): y = y * 2 print(y.requires_grad)
True
False
总结
这一章我们使用pytorch里面的backward
,自动实现了函数的求导,帮助我们在后面面对很多超大参数量的函数的时候,求导就变得游刃有余
上节
PyTorch使用教程-安装与基本使用
到此这篇关于PyTorch 导数应用的使用教程的文章就介绍到这了,更多相关PyTorch 导数应用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
相关推荐
-
将Pytorch模型从CPU转换成GPU的实现方法
最近将Pytorch程序迁移到GPU上去的一些工作和思考 环境:Ubuntu 16.04.3 Python版本:3.5.2 Pytorch版本:0.4.0 0. 序言 大家知道,在深度学习中使用GPU来对模型进行训练是可以通过并行化其计算来提高运行效率,这里就不多谈了. 最近申请到了实验室的服务器来跑程序,成功将我简陋的程序改成了"高大上"GPU版本. 看到网上总体来说少了很多介绍,这里决定将我的一些思考和工作记录下来. 1. 如何进行迁移 由于我使用的是Pytorch写的模型,网上给
-
浅析PyTorch中nn.Linear的使用
查看源码 Linear 的初始化部分: class Linear(Module): ... __constants__ = ['bias'] def __init__(self, in_features, out_features, bias=True): super(Linear, self).__init__() self.in_features = in_features self.out_features = out_features self.weight = Parameter(to
-
pytorch中的embedding词向量的使用方法
Embedding 词嵌入在 pytorch 中非常简单,只需要调用 torch.nn.Embedding(m, n) 就可以了,m 表示单词的总数目,n 表示词嵌入的维度,其实词嵌入就相当于是一个大矩阵,矩阵的每一行表示一个单词. emdedding初始化 默认是随机初始化的 import torch from torch import nn from torch.autograd import Variable # 定义词嵌入 embeds = nn.Embedding(2, 5) # 2
-
PyTorch中Tensor的维度变换实现
对于 PyTorch 的基本数据对象 Tensor (张量),在处理问题时,需要经常改变数据的维度,以便于后期的计算和进一步处理,本文旨在列举一些维度变换的方法并举例,方便大家查看. 维度查看:torch.Tensor.size() 查看当前 tensor 的维度 举个例子: >>> import torch >>> a = torch.Tensor([[[1, 2], [3, 4], [5, 6]]]) >>> a.size() torch.Size
-
pytorch构建网络模型的4种方法
利用pytorch来构建网络模型有很多种方法,以下简单列出其中的四种. 假设构建一个网络模型如下: 卷积层-->Relu层-->池化层-->全连接层-->Relu层-->全连接层 首先导入几种方法用到的包: import torch import torch.nn.functional as F from collections import OrderedDict 第一种方法 # Method 1 --------------------------------------
-
WIn10+Anaconda环境下安装PyTorch(避坑指南)
这些天安装 PyTorch,遇到了一些坑,特此总结一下,以免忘记.分享给大家. 首先,安装环境是:操作系统 Win10,已经预先暗转了 Anaconda. 1. 为 PyTorch 创建虚拟环境 关于 Anaconda 的安装步骤这里就忽略不讲了,Win10 下安装 Anaconda 非常简单. 安装 Anaconda 完毕后,我们在安装 PyTorch 之前最好先创建一个 pytorch 的虚拟环境.之所以创建虚拟环境是因为 Python 为不同的项目需求创建不同的虚拟环境非常常见.在实际项目
-
Pytorch to(device)用法
如下所示: device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") model.to(device) 这两行代码放在读取数据之前. mytensor = my_tensor.to(device) 这行代码的意思是将所有最开始读取数据时的tensor变量copy一份到device所指定的GPU上去,之后的运算都在GPU上进行. 这句话需要写的次数等于需要保存GPU上的tensor变
-
PyTorch 导数应用的使用教程
前言 由于机器学习的基本思想就是找到一个函数去拟合样本数据分布,因此就涉及到了梯度去求最小值,在超平面我们又很难直接得到全局最优值,更没有通用性,因此我们就想办法让梯度沿着负方向下降,那么我们就能得到一个局部或全局的最优值了,因此导数就在机器学习中显得非常重要了 基本使用 tensor.backward()可以及自动将梯度累加积到tensor.grad上 x = torch.ones(3,3) print(x.requires_grad) x.requires_grad_(True) print
-
PyTorch的深度学习入门教程之构建神经网络
前言 本文参考PyTorch官网的教程,分为五个基本模块来介绍PyTorch.为了避免文章过长,这五个模块分别在五篇博文中介绍. Part3:使用PyTorch构建一个神经网络 神经网络可以使用touch.nn来构建.nn依赖于autograd来定义模型,并且对其求导.一个nn.Module包含网络的层(layers),同时forward(input)可以返回output. 这是一个简单的前馈网络.它接受输入,然后一层一层向前传播,最后输出一个结果. 训练神经网络的典型步骤如下: (1) 定义
-
关于PyTorch环境配置及安装教程(Windows10)
目录 一.Anaconda安装 二.安装pytorch环境 1. 停留在上面 Anaconda Prompt 页面上 2. 出现上述页面 3. 按照上图 4. pytorch安装 三.可能遇到的一些问题 新手在配置pytorch过程中总会或多或少遇到些问题,同时网上关于pytorch的环境配置琳琅满目,不知道应该按照哪个配置,这里笔者记录一下自己在windows10下配置Pytorch的全过程. 笔者电脑环境以及安装版本为:Windows10 企业版 + python 3.7.9 + Anaco
-
Pytorch中使用TensorBoard详情
目录 前言 一. Introduction to TensorBoard 二.TensoBoard Pipeline 三.后端数据记录 1. SummaryWriter类 2. 添加数据 3. 关闭SummaryWriter 4. Summary 四.前端显示数据 1. 默认使用 2. 修改端口 五.Summary 1. SummaryWriter APIs 本文记录了如何在Pytorch中使用Tensorboard(主要是为了备忘) 前言 虽然我本身就会用TensorBoard,但是因为Ten
-
在clion上配置libtorch开发环境的图文详解
先上结果: CPP: CMakeLists.txt: 到这里差不多的选手应该都不需要往下看了 描述问题: 按照pytorch官网给的教程,在ubuntu下配置libtorch环境,如上图,需要创建一个build文件夹,然后cmake时不是简单地cmake .. 而是有一个参数-DCMAKE_...... 之后才是.., 而在ubuntu下使用CLion进行编程时,CLion对每一个工程都会默认生成一个cmake-build-debug文件夹,完全不需要创建build文件夹 因此本文说明如何在cl
-
pytorch教程之网络的构建流程笔记
目录 构建网络 定义一个网络 loss Function Backprop 更新权值 参考网址 构建网络 我们可以通过torch.nn包来构建网络,现在你已经看过了autograd,nn在autograd的基础上定义模型和求微分.一个nn.Module包括很多层,forward方法返回output. 一个典型的训练过程包括这么几步: 1.定义一个网络结构包含一些可训练的额参数 2.为数据集制定输入iterata 3.通过网络计算Output 4.计算loss 5.反向传播计算梯度 6.更新权值
-
python机器学习pytorch 张量基础教程
目录 正文 1.初始化张量 1.1 直接从列表数据初始化 1.2 用 NumPy 数组初始化 1.3 从另一个张量初始化 1.4 使用随机值或常量值初始化 2.张量的属性 3.张量运算 3.1 标准的类似 numpy 的索引和切片: 3.2 连接张量 3.3 算术运算 3.4单元素张量 Single-element tensors 3.5 In-place 操作 4. 张量和NumPy 桥接 4.1 张量到 NumPy 数组 4.2 NumPy 数组到张量 正文 张量是一种特殊的数据结构,与数组
-
Pytorch 神经网络—自定义数据集上实现教程
第一步.导入需要的包 import os import scipy.io as sio import numpy as np import torch import torch.nn as nn import torch.backends.cudnn as cudnn import torch.optim as optim from torch.utils.data import Dataset, DataLoader from torchvision import transforms, ut
-
pytorch对梯度进行可视化进行梯度检查教程
目的: 在训练神经网络的时候,有时候需要自己写操作,比如faster_rcnn中的roi_pooling,我们可以可视化前向传播的图像和反向传播的梯度图像,前向传播可以检查流程和计算的正确性,而反向传播则可以大概检查流程的正确性. 实验 可视化rroi_align的梯度 1.pytorch 0.4.1及之前,需要声明需要参数,这里将图片数据声明为variable im_data = Variable(im_data, requires_grad=True) 2.进行前向传播,最后的loss映射为
-
关于windows下Tensorflow和pytorch安装教程
一.Tensorflow安装 1.Tensorflow介绍 Tensorflow是广泛使用的实现机器学习以及其它涉及大量数学运算的算法库之一.Tensorflow由Google开发,是GitHub上最受欢迎的机器学习库之一.Google几乎在所有应用程序中都使用Tensorflow来实现机器学习. 例如,如果您使用到了Google照片或Google语音搜索,那么您就间接使用了Tensorflow模型.它们在大型Google硬件集群上工作,在感知任务方面功能强大. 2.Tensorflow安装(c
随机推荐
- Angular将填入表单的数据渲染到表格的方法
- 使用vue构建移动应用实战代码
- 详解vue2.0组件通信各种情况总结与实例分析
- Javascript 6里的4个新语法
- asp正则过滤重复字符串的代码
- Java动态添加view的方法
- java之路径分隔符介绍
- 如何限制asp.net中上传文件的大小的代码
- javascript实现完美拖拽效果
- js模拟3D场景效果代码打包
- php从数据库查询结果生成树形列表的方法
- 基于Mysql的IP处理函数inet_aton()与inet_ntoa()的深入分析
- mysql错误处理之ERROR 1665 (HY000)
- 浅谈Linux磁盘修复e2fsck命令
- 浅谈java对象转json,数字精确出现丢失问题
- jquery实现网站超链接和图片提示效果
- linux jexus服务设置开机启动
- python更新列表的方法
- jquery中get,post和ajax方法的使用小结
- jQuery中after的两种用法实例