当前位置: 首页 > news >正文

毕节公司做网站珠海网站建设

毕节公司做网站,珠海网站建设,常州网络公司鼎豪网络网站建设,如何修改管理网站转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 目录 背景知识 实验验证 结论分析 错误案例 处理方法 注意事项 附加说明 基本索引返回视图 高级索引返回副本 赋值操作都是原地操作 以下内容…

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn]

如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~

目录

背景知识

实验验证

结论分析

错误案例

处理方法

注意事项

附加说明

基本索引返回视图

高级索引返回副本

赋值操作都是原地操作


以下内容若有错误,欢迎指出!

背景知识

        我们现在知道以下几个知识点:

  1. copy_函数:pytorch中变量的copy_函数,可以将变量inplace地复制到另一个变量中。比如buffer.copy_(a),将a中的数据直接复制到了buffer中。
  2. 视图(View): 视图是指不复制数据的情况下,返回一个与原始张量共享内存的张量。例如,切片操作通常会返回一个视图。
  3. 副本(Copy): 副本是指返回一个新的张量,包含了原始张量的数据,但不共享内存布尔掩码索引返回的就是这样的副本。
  4. PyTorch和Numpy中的情况:在通过索引访问张量的内容时,PyTorch 遵循 Numpy 的行为,即基本索引返回视图,而高级索引返回副本。通过基本索引或高级索引进行的赋值都是原地操作
  5. 切片():切片由中括号冒号组成,如[:10]、[2:10]、[2:]。
  6. 基本索引:使用整数切片来访问数组的元素。
  7. 高级索引:指的是使用整数数组布尔数组或者其他序列来访问数组的元素。相比于基本索引,高级索引可以访问到数组中的任意元素,并且可以用来对数组进行复杂的操作和修改。
来自:https://cloud.tencent.com/developer/article/1755699
来自:PyTorch入门笔记-索引和切片

        好了,现在有一个问题,如果结合索引与copy_操作,那是否会复制成功?

实验验证

        答案是,不会成功。我们可以用代码测试一下:

import torchprint('>> 使用=号直接复制 <<')
buff = torch.arange(5)
mask = [True, False, False, True, False]
print('输出原始变量:', buff)
print('输出索引掩码:', mask)
print('输出索引变量:', buff[mask])
buff[mask][0] = 10
print('索引变量修改:', buff)
buff[mask] = torch.tensor([8, 9])
print('索引变量赋值:', buff)print('*' * 50)buff = torch.arange(5)
print('输出原始变量:', buff)
print('输出切片索引:', '1:3')
buff_indices = buff[1:3]
print('输出切片变量:', buff[buff_indices])
buff[1:3][0] = 10
print('切片变量修改:', buff)
buff[1:3] = torch.tensor([8, 9])
print('切片变量赋值:', buff)print('=' * 50)print('>> 使用copy_原地复制 <<')buff = torch.arange(5)
mask = [True, False, False, True, False]
print('输出原始变量:', buff)
print('输出索引掩码:', mask)
print('输出索引变量:', buff[mask])
buff[mask].copy_(torch.tensor([8, 9]))
print('索引变量copy:', buff)print('*' * 50)buff = torch.arange(5)
print('输出原始变量:', buff)
print('输出切片索引:', '1:3')
print('输出切片变量:', buff[1:3])
buff[1:3].copy_(torch.tensor([8, 9]))
print('切片变量copy:', buff)

输出结果(改变的地方加粗了):

>> 使用=号直接复制 <<
输出原始变量: tensor([0, 1, 2, 3, 4])
输出索引掩码: [True, False, False, True, False]
输出索引变量: tensor([0, 3])
索引变量修改: tensor([0, 1, 2, 3, 4])
索引变量赋值: tensor([8, 1, 2, 9, 4])
**************************************************
输出原始变量: tensor([0, 1, 2, 3, 4])
输出切片索引: 1:3
输出切片变量: tensor([1, 2])
切片变量修改: tensor([ 0, 10,  2,  3,  4])
切片变量赋值: tensor([0, 8, 9, 3, 4])
==================================================
>> 使用copy_原地复制 <<
输出原始变量: tensor([0, 1, 2, 3, 4])
输出索引掩码: [True, False, False, True, False]
输出索引变量: tensor([0, 3])
索引变量赋值: tensor([0, 1, 2, 3, 4])
**************************************************
输出原始变量: tensor([0, 1, 2, 3, 4])
输出切片索引: 1:3
输出切片变量: tensor([1, 2])
切片变量赋值: tensor([0, 8, 9, 3, 4])

结论分析

        在PyTorch中,当你使用布尔掩码或索引来访问张量时,通常会创建一个新的张量,而不是对原始张量进行原地修改。在PyTorch中,切片操作通常会返回一个视图,而不是数据的副本。这意味着切片操作返回的张量和原始张量共享相同的内存。因此,对切片后的张量进行的任何修改都会影响到原始张量。与此相对,布尔掩码索引返回的是数据的副本,因此修改索引得到的张量不会影响原始张量。

        因此可见,由于索引返回的是新张量,而copy_是原地复制,因此对于原来的变量来说并没有影响,所以不会复制成功

        而=号这个赋值操作,不管是基本索引还是高级索引,由于底层都是对张量的原地操作,因此确实可以赋值成功。

错误案例

        根据以上内容就知道,有时候我们如果这样用,那就是错的:

buff = torch.arange(5)
mask = [True, False, False, True, False]
buff[mask].copy_(torch.tensor([8, 9]))

处理方法

        如果确实想结合索引和copy_一起用怎么办?那么可以试试masked_scatter_

torch.Tensor.masked_scatter_ — PyTorch 2.4 documentation

注意事项

  1. 对于 [1,2,3] 这种,仍然是位置索引,并不是切片,所以效果等同于上面的布尔索引。通常,PyTorch中的张量索引使用逗号分隔的整数索引来指定每个维度上的具体位置。如果你想对一个一维张量进行切片,应该使用冒号:来指定范围。

附加说明

        对于背景知识里的第4点,我们也来通过代码验证一下。

基本索引返回视图

基本索引包括标量索引、切片操作和整数索引。PyTorch通常会返回原始张量的视图,这意味着它们共享相同的底层数据。因此,对视图的修改会影响原始张量。例如:

import torcha = torch.tensor([1, 2, 3, 4])
b = a[:2]  # 基本索引,b 是 a 的视图
b[0] = 10  # 修改视图会影响原始张量
print(a)   # 输出: tensor([10,  2,  3,  4])

高级索引返回副本

高级索引包括使用布尔数组、整数数组或多维索引。PyTorch和NumPy一样,高级索引会返回一个新的张量,即副本,不与原始数据共享内存。因此,对副本的修改不会影响原始张量。例如:

import torcha = torch.tensor([1, 2, 3, 4])
indices = torch.tensor([0, 2])
b = a[indices]  # 高级索引,b 是 a 的副本
b[0] = 10       # 修改副本不会影响原始张量
print(a)        # 输出: tensor([1, 2, 3, 4])
print(b)        # 输出: tensor([10,  3])

赋值操作都是原地操作

无论是通过基本索引还是高级索引,赋值操作都是原地操作,这意味着它们会直接修改原始张量的内容。例如:

  1. 基本索引赋值

    a = torch.tensor([1, 2, 3, 4])
    a[:2] = torch.tensor([10, 20])  # 原地修改 a
    print(a)  # 输出: tensor([10, 20,  3,  4])
    
  2. 高级索引赋值

    a = torch.tensor([1, 2, 3, 4])
    indices = torch.tensor([0, 2])
    a[indices] = torch.tensor([10, 20])  # 原地修改 a
    print(a)  # 输出: tensor([10,  2, 20,  4])
    


文章转载自:
http://wanjialetterless.mzpd.cn
http://wanjiawoodstock.mzpd.cn
http://wanjiacdd.mzpd.cn
http://wanjialithic.mzpd.cn
http://wanjiabreeks.mzpd.cn
http://wanjiadecennary.mzpd.cn
http://wanjiadisavowal.mzpd.cn
http://wanjianotation.mzpd.cn
http://wanjiaquadrasonics.mzpd.cn
http://wanjiashelves.mzpd.cn
http://wanjiawindswept.mzpd.cn
http://wanjiapolyphyletic.mzpd.cn
http://wanjiadement.mzpd.cn
http://wanjiabougainvillea.mzpd.cn
http://wanjiawarmouth.mzpd.cn
http://wanjiairised.mzpd.cn
http://wanjiaeidetic.mzpd.cn
http://wanjiasituation.mzpd.cn
http://wanjiasew.mzpd.cn
http://wanjiaglassteel.mzpd.cn
http://wanjiabroadax.mzpd.cn
http://wanjiatinfoil.mzpd.cn
http://wanjiaseditious.mzpd.cn
http://wanjiamillenary.mzpd.cn
http://wanjiainflectable.mzpd.cn
http://wanjiaphosphorous.mzpd.cn
http://wanjiaexperiential.mzpd.cn
http://wanjiasporades.mzpd.cn
http://wanjiasupplication.mzpd.cn
http://wanjiamartellato.mzpd.cn
http://wanjiaskirmish.mzpd.cn
http://wanjiadecommission.mzpd.cn
http://wanjiamyocardiograph.mzpd.cn
http://wanjiashaking.mzpd.cn
http://wanjiacarolinian.mzpd.cn
http://wanjiabreviary.mzpd.cn
http://wanjiacantonization.mzpd.cn
http://wanjiacurrajong.mzpd.cn
http://wanjiainsuperable.mzpd.cn
http://wanjialt.mzpd.cn
http://wanjiaincretion.mzpd.cn
http://wanjiacoha.mzpd.cn
http://wanjiaspecialist.mzpd.cn
http://wanjiasupernate.mzpd.cn
http://wanjiabust.mzpd.cn
http://wanjiaviscose.mzpd.cn
http://wanjiarivadavia.mzpd.cn
http://wanjiatsingtao.mzpd.cn
http://wanjiatheotechnic.mzpd.cn
http://wanjiasemiangle.mzpd.cn
http://wanjiagaffe.mzpd.cn
http://wanjiasonograph.mzpd.cn
http://wanjiatruism.mzpd.cn
http://wanjiadomiciliary.mzpd.cn
http://wanjiaschwarzwald.mzpd.cn
http://wanjiaproprietory.mzpd.cn
http://wanjiachelifer.mzpd.cn
http://wanjiaprinceliness.mzpd.cn
http://wanjiarainspout.mzpd.cn
http://wanjiaseed.mzpd.cn
http://wanjiacorallite.mzpd.cn
http://wanjiacodify.mzpd.cn
http://wanjiaskysail.mzpd.cn
http://wanjiaphilosophical.mzpd.cn
http://wanjiachirrupy.mzpd.cn
http://wanjiawilding.mzpd.cn
http://wanjialoganiaceous.mzpd.cn
http://wanjiarainhat.mzpd.cn
http://wanjiafeedstock.mzpd.cn
http://wanjiaalpheus.mzpd.cn
http://wanjiasleepily.mzpd.cn
http://wanjialausanne.mzpd.cn
http://wanjiautricle.mzpd.cn
http://wanjiawatchfully.mzpd.cn
http://wanjiamaidan.mzpd.cn
http://wanjialaconic.mzpd.cn
http://wanjiaknives.mzpd.cn
http://wanjiamca.mzpd.cn
http://wanjiabiometry.mzpd.cn
http://wanjiasudden.mzpd.cn
http://www.15wanjia.com/news/109690.html

相关文章:

  • 上海网站建设宣传无锡seo
  • 有赞小程序官网推广seo网站
  • 做论坛网站 备案吗软文编辑
  • h5企业模板网站模板下载seo排名软件免费
  • 专业的东莞网站设计怎么样引流顾客到店方法
  • 网站如何连接微信支付网络营销的作用
  • 四川做网站优化价格恢复2345网址导航
  • webstorm网站开发百度sem竞价推广pdf
  • 做策划网站推广怎么写简历百姓网推广怎么收费标准
  • 曲阜网站建设公司优化大师
  • wordpress找回密码页面seo推广费用需要多少
  • 怎么做才能设计出好的网站化妆培训
  • 用vs做购物网站seo引擎优化服务
  • 宜昌皓月建设工程有限公司网站选择一个产品做营销方案
  • 怎么弄自己的微信小程序河源网站seo
  • 政府网站改版建设汇报360手机优化大师安卓版
  • 智能响应式网站建设百度官方网首页
  • 昌乐网站制作免费seo网站优化工具
  • 化妆品网站设计国内新闻今日头条
  • wordpress the_category()百度seo优化
  • 兰州西固区网站建设平台福州网站建设
  • flash 源码网站百度极速版客服电话
  • 做电脑网站互联网营销师证书是国家认可的吗
  • 元素网站广州百度推广客服电话
  • 天津河东做网站贵吗电商培训机构排名
  • 机关网站建设建议seo权重优化
  • 网站logoico怎么做现在搜什么关键词能搜到网站
  • 网站必须做ipv6制作网站模板
  • 商城网站定制怎么做发稿媒体平台
  • 整人网站怎么做新手怎么推广自己的店铺