能用张量处理就用张量,不要使用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. 一、MySQL 函数

    1.MySQL 字符串函数 函数 描述 实例 结果展示 说明 REPLACE(s,s1,s2) 将字符串s2代替字符串s中的字符串s1 SELECT REPLACE(ccc.contract_no,& ...

  2. R语言主成分PCA、因子分析、聚类对地区经济研究分析重庆市经济指标|附代码数据

    全文下载链接:http://tecdat.cn/?p=27515 最*我们被客户要求撰写关于主成分PCA.因子分析.聚类的研究报告,包括一些图形和统计输出. 建立重庆市经济指标发展体系,以重庆市一小时 ...

  3. 自考网络原理:安全套接字层SSL

    对ssl/tls的理解 前:SSL; 后:TLS: 以下是B站上的up主讲的,非常的深入浅出,讲的很好.感谢技术蛋老师. https://www.bilibili.com/video/BV1KY411 ...

  4. 【Anaconda】为右键菜单添加“当前位置开启Anaconda Prompt”

    Stack Overflow 上查找到该解决方法:『Adding "Open Anaconda Prompt here" to context menu (Windows) - S ...

  5. iptables(二)常用规则即操作示例

    常用规则示例 修改chain默认策略 #filter表在INPUT chain默认策略为ACCEPT[root@iptables_host02 ~]# iptables -nvL INPUTChain ...

  6. mysql 修改字符集相关操作

    修改某个表字段的字符集 ALTER TABLE apply_info MODIFY member_name varchar(128) CHARACTER SET utf8mb4; 查看某个库的字符集类 ...

  7. Python 面试题整理

    一.语言特性 1.什么是Python?使用Python有什么好处?Python和其他语言的区别? Python是一种编程语言,它有对象,模块,线程,异常处理和自动内存管理. 好处:开源.简洁.简单.方 ...

  8. C++ primer笔记 -标准库类型

    最重要的两个标准库类型:string和vector string 类型的输入操作符: 1.读取并忽略开头所有的空白符 2.读取字符直至再次遇到空白字符,读取终止 string对象的基本操作: stri ...

  9. 很抱歉,无法安装Office(64位),因为您的计算机上已经安装了这些32位Office程序

    可使用下面的方法获取最新最全的Win10 KEY: 1.请加微信公众号号:jiangivana 或扫一扫下面的二维码. 2.加微信公众号以后回复[key]将获得最新最全的Win10密钥. 64位与32 ...

  10. spring-boot 引入redis

    1.引入redis <dependency> <groupId>org.springframework.boot</groupId> <artifactId& ...