能用张量处理就用张量,不要使用for in 跑循环,一个是容易出错,一个是比较浪费时间,应用广播机制的话去做很容易的

1.5

使用mean处理平均值

2.

在处理梯度的时候无法更改自身,因此使用的办法是with

一个简单的例子:

import torch as tt

x=tt.tensor(range(20))

y=x+3

w=tt.tensor([1.0],requires_grad=True)

b=tt.tensor([1.0],requires_grad=True)

def loss_fn(x,y,w,b):

det=0.5(y-wx-b)**2

det=det.mean()

return det

def training_loop(n_epochs, learning_rate, w,b,x, y):

for epoch in range(1, n_epochs + 1):

if w.grad is not None:

w.grad.zero_()

b.grad.zero_()

y=w*x+b

loss = loss_fn(x,y,w,b)

loss.backward()

with torch.no_grad():

w -= learning_rate * w.grad

return w,b

training_loop(10,1e-2,w,b,x,y)

这里的with是切换上下文,后面的torch.no_grad()是强制断图,在需要对叶子节点本身进行修改的时候使用

再补充一下

所谓标量y对矢量x求导,指的是,总的贡献y,对于每个分量贡献x进行求导,如果有n个x,里面代表的是,不同的x

比如卖苹果

苹果的价格是总的贡献,每个x的标度,比如口味,地址,大小是分贡献,每个Y,对应一个序列,(x1,x2,x3……)

而如果是矢量y对矢量x求导,代表的是y的每个分量对于x进行求导,需要传入一个和y相同大小的,代表y在每个方向上的权重。(一般是1,1,1但是也可以是1,2,3,权重是直接乘上去的)

retain_graph=True的意义在于不加的话,每次back时都会拆掉已经构建好的图,而第二次的时候依旧会尝试访问拆掉的图,所以会导致报错,这时候就需要这个东西

torch.autograd.grad这个函数的意义在于不用遍历全图求梯度但是图还是建了的,而且可以用来求单个梯度,但是并没有累积在其中,因此需要使用诸如:

print(torch.autograd.grad)之类的来访问,对于一次性的东西来说很方便

4.玩back(反向求导)的时候梯度会累加,这可能是因为第二次计算的结果,因此多次更新/多次反向时需要将梯度至为0

pytorch 简简单单求个值的更多相关文章

  1. ACM3 求最值

    /*2*2014.11.18*求最值*描述:给定N个整数(1<=N<=100),求出这N个数中的最大值,最小值.*输入:多组数据,第一行为一个整数N,第二行为N个不超过100的正整数,用空 ...

  2. [NOI2005]维修数列 Splay tree 区间反转,修改,求和,求最值

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1500 Description Input 输入文件的第1行包含两个数N和M,N表示初始时数 ...

  3. hdu4521-小明系列问题——小明序列(线段树区间求最值)

    题意:求最长上升序列的长度(LIS),但是要求相邻的两个数距离至少为d,数据范围较大,普通dp肯定TLE.线段树搞之就可以了,或者优化后的nlogn的dp. 代码为  线段树解法. #include ...

  4. javascript之求最值

    求最值: var selections = $("#deliveryGridSalesOrGoods").datagrid('getRows'); var costPrice = ...

  5. poj3264(线段树区间求最值)

    题目连接:http://poj.org/problem?id=3264 题意:给定Q(1<=Q<=200000)个数A1,A2,```,AQ,多次求任一区间Ai-Aj中最大数和最小数的差. ...

  6. Sql示例说明如何分组后求中间值--【叶子】

    原文:Sql示例说明如何分组后求中间值--[叶子] 这里所谓的分组后求中间值是个什么概念呢? 我举个例子来说明一下: 假设我们现在有下面这样一个表: type        name price -- ...

  7. hdu 1754 I Hate It(树状数组区间求最值)2007省赛集训队练习赛(6)_linle专场

    题意: 输入一行数字,查询第i个数到第j个数之间的最大值.可以修改其中的某个数的值. 输入: 包含多组输入数据. 每组输入首行两个整数n,m.表示共有n个数,m次操作. 接下来一行包含n个整数. 接下 ...

  8. C语言 · 求arccos值

    算法提高 7-2求arccos值   时间限制:10.0s   内存限制:256.0MB      问题描述 利用标准库中的cos(x)和fabs(x)函数实现arccos(x)函数,x取值范围是[- ...

  9. 位运算求最值 学习笔记 (待补充QAQ)

    没有什么前言?直接进入正题qwq 俩俩异或 求最值: 建trie树 O(n)枚举每个数找这个数的最值,每次反走就成,还可以剪枝一波(如果在某位已经小于ans显然可以直接return? void Ins ...

  10. [note]一类位运算求最值问题

    [note]一类位运算求最值问题 给定一些数,让你从中选出两个数a,b,每次询问下列中的一个 1.a and b的最大值 2.a xor b的最大值 3.a or b的最大值 神仙们都是FWT,小蒟蒻 ...

随机推荐

  1. android 编译 node js 14

    本文基于wsl ubuntu 22.04.1 LTS 系统 上成功编译 安卓版 node js 14.15.4的一些记录. 编译环境: nodejs 用到两套编译器分别用来编译本机的一些工具链和目标平 ...

  2. JVM运行时内存区

    JVM运行时内存区是如何划分的? 方法区(Method Area):存储类的字节码信息.常量池 堆区(Heap  Area):存储对象 Java方法栈(Stack Area):所有方法运行时,会创建一 ...

  3. ipmitool使用报错Could not open device at /dev/ipmi0 or /dev/ipmi/0 or /dev/ipmidev/0: No such file or directory

    ipmitool使用报错处理 Could not open device at /dev/ipmi0 or /dev/ipmi/0 or /dev/ipmidev/0: No such file or ...

  4. check power supply check cpu top

    lshw -c power power supply mwh https://www.eia.gov/energyexplained/electricity/electricity-in-the-us ...

  5. 下载base64图片

    下载 this.downloadFile('二维码',that.img64) downloadFile(fileName, content) { let aLink = document.create ...

  6. IDEA使用fastjson1时maven引入依赖没报错,但是用不了JSONObject工具类

    删除项目下的.idea文件夹重新打开项目就行, 不知道为什么

  7. mmdetection3d安装

    conda create -n openmmlab python=3.7 -y conda activate openmmlab pip install torch==1.8.1+cu101 torc ...

  8. HTML 到 CSS,乃至进阶的 XML、SQL、JS、PHP 和 ASP.NET

    https://www.runoob.com/tags/html-reference.html 在线版,从基础的 HTML 到 CSS,乃至进阶的 XML.SQL.JS.PHP 和 ASP.NET. ...

  9. OPENCV3 API

    图像翻转 void flip(InputArray src, OutputArray dst, int flipCode); flipCode: 0: x 轴翻转 1: y 轴翻转 <0: x, ...

  10. Linux基本概念

    目录 1. 内核.内核态和用户态 2. 用户和组 3. 文件和文件系统 4. I/O模型 5. 程序.进程.线程和协程 6. shell.终端和会话 1. 内核.内核态和用户态 ​ 内核是指管理和分配 ...