Pytorch 使用tensor特定条件判断索引


Posted in Python onApril 08, 2021

torch.where() 用于将两个broadcastable的tensor组合成新的tensor,类似于c++中的三元操作符“?:”

区别于python numpy中的where()直接可以找到特定条件元素的index

Pytorch 使用tensor特定条件判断索引

想要实现numpy中where()的功能,可以借助nonzero()

Pytorch 使用tensor特定条件判断索引

对应numpy中的where()操作效果:

Pytorch 使用tensor特定条件判断索引

补充:Pytorch torch.Tensor.detach()方法的用法及修改指定模块权重的方法

detach

detach的中文意思是分离,官方解释是返回一个新的Tensor,从当前的计算图中分离出来

Pytorch 使用tensor特定条件判断索引

需要注意的是,返回的Tensor和原Tensor共享相同的存储空间,但是返回的 Tensor 永远不会需要梯度

Pytorch 使用tensor特定条件判断索引

import torch as t
a = t.ones(10,)
b = a.detach()
print(b)
tensor([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])

那么这个函数有什么作用?

?假如A网络输出了一个Tensor类型的变量a, a要作为输入传入到B网络中,如果我想通过损失函数反向传播修改B网络的参数,但是不想修改A网络的参数,这个时候就可以使用detcah()方法

a = A(input)
a = detach()
b = B(a)
loss = criterion(b, target)
loss.backward()

来看一个实际的例子:

import torch as t
x = t.ones(1, requires_grad=True)
x.requires_grad   #True
y = t.ones(1, requires_grad=True)
y.requires_grad   #True
x = x.detach()   #分离之后
x.requires_grad   #False
y = x+y         #tensor([2.])
y.requires_grad   #我还是True
y.retain_grad()   #y不是叶子张量,要加上这一行
z = t.pow(y, 2)
z.backward()    #反向传播
y.grad        #tensor([4.])
x.grad        #None

以上代码就说明了反向传播到y就结束了,没有到达x,所以x的grad属性为None

既然谈到了修改模型的权重问题,那么还有一种情况是:

?假如A网络输出了一个Tensor类型的变量a, a要作为输入传入到B网络中,如果我想通过损失函数反向传播修改A网络的参数,但是不想修改B网络的参数,这个时候又应该怎么办了?

这时可以使用Tensor.requires_grad属性,只需要将requires_grad修改为False即可.

for param in B.parameters():
 param.requires_grad = False
a = A(input)
b = B(a)
loss = criterion(b, target)
loss.backward()

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Python 相关文章推荐
跟老齐学Python之坑爹的字符编码
Sep 28 Python
python协程用法实例分析
Jun 04 Python
在Django中创建动态视图的教程
Jul 15 Python
Python调用系统底层API播放wav文件的方法
Aug 11 Python
python接口自动化(十六)--参数关联接口后传(详解)
Apr 16 Python
Python中字符串List按照长度排序
Jul 01 Python
django 外键创建注意事项说明
May 20 Python
Python flask框架实现浏览器点击自定义跳转页面
Jun 04 Python
python用Tkinter做自己的中文代码编辑器
Sep 07 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
Oct 04 Python
如何利用python正则表达式匹配版本信息
Dec 09 Python
python基于机器学习预测股票交易信号
May 25 Python
selenium.webdriver中add_argument方法常用参数表
Apr 08 #Python
python3使用diagrams绘制架构图的步骤
python实现求纯色彩图像的边框
python爬取企查查企业信息之selenium自动模拟登录企查查
Python3 使用pip安装git并获取Yahoo金融数据的操作
Apr 08 #Python
Django 如何实现文件上传下载
Apr 08 #Python
python3 删除所有自定义变量的操作
Apr 08 #Python
You might like
BBS(php & mysql)完整版(一)
2006/10/09 PHP
PHP中的session永不过期的解决思路及实现方法分享
2011/04/20 PHP
PHP基础知识介绍
2013/09/17 PHP
thinkphp的静态缓存用法分析
2014/11/29 PHP
PHP下载远程文件到本地存储的方法
2015/03/24 PHP
我见过最全的个人js加解密功能页面
2007/12/12 Javascript
js实现图片拖动改变顺序附图
2014/05/13 Javascript
jquery插件splitScren实现页面分屏切换模板特效
2015/06/16 Javascript
Node.js操作Firebird数据库教程
2016/03/04 Javascript
详解基于webpack和vue.js搭建开发环境
2017/04/05 Javascript
JS实现获取图片大小和预览的方法完整实例【兼容IE和其它浏览器】
2017/04/24 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
2019/04/24 Javascript
浅谈JS中this在各个场景下的指向
2019/08/14 Javascript
vue 在单页面应用里使用二级套嵌路由
2020/12/19 Vue.js
[00:32]2018DOTA2亚洲邀请赛VG出场
2018/04/03 DOTA
python实现sublime3的less编译插件示例
2014/04/27 Python
Python实现对比不同字体中的同一字符的显示效果
2015/04/23 Python
python使用urllib2提交http post请求的方法
2015/05/26 Python
在Django的模型和公用函数中使用惰性翻译对象
2015/07/27 Python
使用python 写一个静态服务(实战)
2019/06/28 Python
Django后端发送小程序微信模板消息示例(服务通知)
2019/12/17 Python
python+opencv实现移动侦测(帧差法)
2020/03/20 Python
瑞士国际航空官网:SWISS
2016/07/21 全球购物
简述数据库的设计过程
2015/06/22 面试题
计算机系毕业生推荐信
2013/11/06 职场文书
项目考察欢迎辞
2014/01/17 职场文书
社会学专业求职信
2014/02/24 职场文书
全国税务系统先进集体事迹材料
2014/05/19 职场文书
竞选班长演讲稿500字
2014/08/22 职场文书
课程设计的心得体会
2014/09/03 职场文书
党的群众路线教育实践活动批评与自我批评发言稿
2014/10/16 职场文书
整改落实自查报告
2014/11/05 职场文书
财务出纳岗位职责
2015/03/31 职场文书
2015年大学团支部工作总结
2015/05/13 职场文书
美德少年事迹材料(2016推荐版)
2016/02/25 职场文书
python实现会员管理系统
2022/03/18 Python