热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

paddle复现pytorch踩坑(四):Tensor

paddlepaddle从1.5版本以上采用动态图的思想,本博客基于1.8.0以上版本。关于Tensor的用法:pytorch可以使用静态数组索引&#

paddlepaddle从1.5版本以上采用动态图的思想,本博客基于1.8.0以上版本。
关于Tensor的用法:


  • pytorch可以使用静态数组索引;可以使用tensor索引
  • paddlepaddle可以使用静态数组索引;不可以使用tensor索引

示例1:索引示例

# pytorch code
aa = cls[active, :]
# paddlepaddle code
aa = cls[active, :]

报错:

SystemError: <built-in method __getitem__ of PyCapsule object at 0x0000023217C75F90> returned a result with an error set

  • 其中
    activate &#61; tensor [1,… 0, 1…0]
    clc &#61; tenor.shape [300, 4]
  • 原因&#xff1a;在pytorch里可以这样写&#xff0c;但是在paddle里不行
  • 改为&#xff1a;利用nonzero 和 gather函数

# paddlepaddle code
index &#61; fluid.layers.nonzero(active)
aa &#61; fluid.layers.gather(cls, index)

测试全代码

import paddle.fluid as fluid
from paddle.fluid.dygraph.base import to_variable
import numpy as npdata &#61; np.ones([300, 4]).astype(&#39;float32&#39;)
index &#61; np.zeros([300]).astype(&#39;int&#39;)
index[0] &#61; 1
index[2] &#61; 1
index[10] &#61; 1with fluid.dygraph.guard():data &#61; to_variable(data)index &#61; to_variable(index)index &#61; fluid.layers.nonzero(index)data &#61; fluid.layers.gather(data, index)# data &#61; data[index, :]print(data.shape)

示例2

# pytorch code
active &#61; labels_weight > 0
y &#61; bbox_x[active]# paddlepaddle code
active &#61; labels_weight > 0
index &#61; fluid.layers.nonzero(active)
y &#61; fluid.layers.concat([fluid.layers.reshape(fluid.layers.gather(bbox_x[i, :], index[i, :]), [1, -1]) for i in range(index.shape[0])], axis&#61;0)

示例3

# pytorch code
loss_bbox_y &#61; fluid.layers.mean(loss_bbox_y * bbox_weights[active])# paddlepaddle code
loss_bbox_y &#61; fluid.layers.mean(fluid.layers.cast(loss_bbox_y, &#39;float64&#39;)* fluid.layers.concat([fluid.layers.reshape(fluid.layers.gather(bbox_weights[i, :], index[i, :]), [1, -1]) for i in range(index.shape[0])], axis&#61;0))

示例4

# pytorch code
bbox_x3d_dn_fg &#61; bbox_x3d_dn[bind, fg_inds]# paddlepaddle code
bbox_x3d_dn_fg &#61; fluid.layers.gather(bbox_x3d_dn[bind], fluid.dygraph.to_variable(fg_inds))

示例5&#xff1a;不能维度直接赋值

报错&#xff1a;

TypeError: &#39;paddle.fluid.core_avx.VarBase&#39; object does not support item assignment

# pytorch code
Pred_boxes[:, 0] &#61; pred_ctr_x - 0.5 * pred_w
pred_boxes[:, 1] &#61; pred_ctr_y - 0.5 * pred_h
pred_boxes[:, 2] &#61; pred_ctr_x &#43; 0.5 * pred_w
pred_boxes[:, 3] &#61; pred_ctr_y &#43; 0.5 * pred_h# paddlepaddle code
pred_boxes &#61; fluid.layers.concat([pred_ctr_x - 0.5 * pred_w,pred_ctr_y - 0.5 * pred_h,pred_ctr_x &#43; 0.5 * pred_w,pred_ctr_y &#43; 0.5 * pred_h
])

示例6&#xff1a;维度报错

报错&#xff1a;

too many indices (3) for tensor of dimension 2

# pytorch code
bbox_x[bind, :, np.newaxis ]
# paddlepaddle code
fluid.layers.reshape(bbox_x[bind, :], [1, -1, 1])

示例7&#xff1a;tensor的值不能直接利用

报错&#xff1a;paddlepaddle中的value不能直接拿出来用。

TypeError: The type of &#39;shape&#39; in reshape must be list[int] or tuple(int) in Dygraph mode, but received <class &#39;list&#39;>, which contains Variable.

错误代码&#xff1a;其中stack_size, feat_size 为 tensor。

# paddlepaddle code
shift_x1 &#61; fluid.layers.reshape(fluid.dygraph.to_variable(shift_x1), [1, stack_size, feat_size[1]])

改进加入

# paddlepaddle code
stack_size &#61; stack_size.numpy()
feat_size &#61; feat_size.numpy()

Tensor数据类型判断

# pytorch code
if data_type &#61;&#61; torch.tensor:# paddlepaddle code
if data_type &#61;&#61; fluid.core_avx.VarBase:

其他用法

# pytorch code
b &#61; q_lt[..., :N]# paddlepaddle code
b &#61; q_lt[:, :, :, :N]

需要注意pytorch中.contiguous方法

.contiguous()方法&#xff0c;使tensor的元素在内存空间中连续
通常

tensor.contiguous().view()
&#61;&#61;
tensor.reshape()

推荐阅读
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 本文由编程笔记小编整理,主要介绍了使用Junit和黄瓜进行自动化测试中步骤缺失的问题。文章首先介绍了使用cucumber和Junit创建Runner类的代码,然后详细说明了黄瓜功能中的步骤和Steps类的实现。本文对于需要使用Junit和黄瓜进行自动化测试的开发者具有一定的参考价值。摘要长度:187字。 ... [详细]
  • 本文介绍了如何在Mac上使用Pillow库加载不同于默认字体和大小的字体,并提供了一个简单的示例代码。通过该示例,读者可以了解如何在Python中使用Pillow库来写入不同字体的文本。同时,本文也解决了在Mac上使用Pillow库加载字体时可能遇到的问题。读者可以根据本文提供的示例代码,轻松实现在Mac上使用Pillow库加载不同字体的功能。 ... [详细]
author-avatar
syjs10
这个家伙很懒
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有