举个例子

a = torch.randn(2, 3, 4)
a.requires_grad=True
a
tensor([[[ 1.2255,  1.5870, -0.5485, -0.4809],[-0.3167, -0.2933, -0.0604,  0.3498],[ 0.1436,  0.3083,  1.6776, -1.1144]],[[-1.5001,  0.7174,  0.2585,  0.2669],[-0.1319, -0.8247,  0.1929, -0.6142],[ 1.1407,  2.2324, -1.3897, -0.2413]]], requires_grad=True)

假设mask为:

mask
tensor([[False,  True,  True],[False,  True,  True]])

(1)如果假设b为:

b = torch.arange(16).view(2, 2, 4).float()
b.requires_grad = True
b
tensor([[[ 0.,  1.,  2.,  3.],[ 4.,  5.,  6.,  7.]],[[ 8.,  9., 10., 11.],[12., 13., 14., 15.]]], requires_grad=True)

直接赋值会导致出错:

a[mask] = b
Traceback (most recent call last):File "<input>", line 1, in <module>
RuntimeError: a leaf Variable that requires grad is being used in an in-place operation.

这是因为叶子节点不能进行原地替换操作。
(2)介绍一个函数tgt.index_put_(indices, value):根据indices把tgt中的值替换为value。
另外,b的size也不能是[2, 2, 4]了,应该是[4, 4]。可以根据下面这个方法确定b的size。

a[mask].size()
torch.Size([4, 4])

则:

b = torch.arange(16).view(4, 4).float()
b.requires_grad = True
b
tensor([[ 0.,  1.,  2.,  3.],[ 4.,  5.,  6.,  7.],[ 8.,  9., 10., 11.],[12., 13., 14., 15.]], requires_grad=True)
c = a.index_put((mask,), b)
c
tensor([[[ 1.2255,  1.5870, -0.5485, -0.4809],[ 0.0000,  1.0000,  2.0000,  3.0000],[ 4.0000,  5.0000,  6.0000,  7.0000]],[[-1.5001,  0.7174,  0.2585,  0.2669],[ 8.0000,  9.0000, 10.0000, 11.0000],[12.0000, 13.0000, 14.0000, 15.0000]]], grad_fn=<IndexPutBackward0>)

请注意:

  1. mask必须转为tuple,(mask,);不能使用tuple(mask),这两个的顺序不一样
(mask,)
(tensor([[False,  True,  True],[False,  True,  True]]),)
tuple(mask)
(tensor([False,  True,  True]), tensor([False,  True,  True]))

2.这个out-place操作,不是in-place操作,需要赋值为c才能进行前向、后向传播和梯度更新。

torch中(required_grad_=True),根据mask替换掉部分值相关推荐

  1. 如何把PDF中的一页内容替换掉

    在工作中我们常常会用到PDF文档,有时其中一页的内容不合适,如果删除重新编写会比较费时,是否可以直接用其他文档的一页直接替换掉呢? 对于PDF的相关修改我们需要用到PDF编辑器.首先运行极速PDF编辑 ...

  2. 如何将网页下载的文档中的手动换行符替换掉

    在现实工作当中,经常会遇到下载的文档多一些特殊的符号,如下图: 首先为了更好的展现,需要先做如下设置, 这样文章中的所有标记都会显示出来 这实际是由于不同的存在形式引起的,如果对文档不进行合理的格式转 ...

  3. 在Android中自定义捕获Application全局异常,可以替换掉系统的强制退出对话框(很有参考价值与实用价值)

    在Android中自定义捕获Application全局异常,可以替换掉系统的强制退出对话框(很有参考价值与实用价值) 参考文章: (1)在Android中自定义捕获Application全局异常,可以 ...

  4. php替换视频教程,替换掉视频运动中的文字 | 修改视频文字的内容(附带软件与详细教程)...

    对于广告视频宣传,不知狸友们曾经是否有过这样的想法,利用借势营销的手段,将某段热门的视频影视片段修改成广告的内容,以达到热点广告的目的.在这个互联网比较发达的时代,广告形式各式各样,唯有创新或者比较突 ...

  5. SQL语句批量去除、替换掉某列(字段)中包含的某个字符串

    原文链接: SQL语句批量去除.替换掉某列(字段)中包含的某个字符串,一并总结下列的增删改操作_Java Punk的博客-CSDN博客_sql删除包含某种字所有信息 以MySQL为例: 以下案例假设 ...

  6. 编译器中,光标变宽,输入字符会替换掉原字符

    遇到情形:编译器中,光标变宽,输入字符会替换掉原字符 如上图所示,在Qt或者QNX中遇到这种情形,光标变宽,输入b会替换后面的字符a 原因: 不小心按了insert键 再按下insert键就好了.

  7. 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | AMS 启动前使用动态代理替换掉插件 Activity 类 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  8. 对Word文档中的指定内容进行替换

    不知大家在对Word操作时,有没有遇到需要对指定内容进行替换这种需求.前几天公司有个需求,就是对PDF邀请函的姓名那部分内容进行替换,因为本人以前对Word的书签有过操作,所以思路就是通过将这部分内容 ...

  9. js替换html中的字符串,js怎么替换字符串?

    在js中,可以使用str.replace()方法来替换字符串.replace()方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串:然后返回一个新的字符串. replace( ...

最新文章

  1. Oracle 用户管理
  2. 产业为主谋定共享运行-农业大健康·万祥军:特色化小镇时代
  3. WebRTC大会火爆上演,网易云信谈音视频研发三大突破点
  4. wireshark1.8捕获无线网卡的数据包——找不到无线网卡!
  5. poj-1980 Unit Fraction Partition **
  6. android 关于关于子线程更新UI的一些事
  7. GOF之结构型模式Ⅱ(重点)
  8. git 日常 常用命令
  9. 常用中文字体的Unicode编码
  10. Ubuntu添加开机自动运行程序
  11. 【vue】ramda.js在vue中的使用
  12. 如何搭建IPv6测试你的APP
  13. 【大疆2021校招】【硬件B卷】笔试题
  14. 基于Linux实现的聊天室小程序
  15. nod-1089-最长回文子串 V2
  16. 2021世界人工智能大会开幕,百度飞桨荣获“SAIL之星”奖项
  17. Laravel使用Dingo API+JWT实现认证机制 无痛刷新Token
  18. Grain Identity
  19. 互联网老炮儿谈用户,怎一个精字了得
  20. unity3D实现录音功能,并将真实录音时长保存至本地(不能用可私信,附可执行文件下载地址)

热门文章

  1. C++文件操作的具体方法
  2. 推荐书单——不定时更新
  3. 3个思考方向,轻松实现快速涨粉
  4. 【2018十大VR眼镜排行榜】VR眼镜有哪些品牌。哪个牌子的VR眼镜比较好,性价比高,适合玩VR游戏的
  5. 道高一尺 魔高一丈 内存泄漏智能指针
  6. C语言练习之输入x输出y
  7. 福建农村信用社计算机类C卷考什么,2015年福建省农村信用社公开招聘考试《计算机类》真题及详解...
  8. Tesseract 教程
  9. Maven的安装、配置及使用入门
  10. [SMOJ2116]诺诺的队列