Pytorch中view, transpose, permute等方法的区别
Pytorch中view, transpose, permute等方法的区别
- transpose与permute的区别与联系
- view 与transpose与permute的区别与联系
transpose与permute的区别与联系
这两个操作比较相似, transpose每次将任意两个指定的dim进行交换
,相当于是2D array的转置操作,而permute可以一次将Tensor变换到任意的dimensions sequence的排列
。 Permute操作可以有1至多步的Transpose操作实现
。
例子:
data = th.tensor([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
data_t = data.transpose(1, 2)
data_p = data.permute(2, 0, 1)
data_t_t = data_t.transpose(0, 1)
print('data_t', data_t)
print('data_p', data_p)
print(data_t_t == data_p)
print(data_t.data_ptr() == data.data_ptr() and data_t.is_contiguous() != data.is_contiguous())
print(data_t.stride()[1] == data.stride()[2] and data_t.stride()[2] == data.stride()[1])
Output:
注: transpose操作产生的新的Tensor与原始Tensor相比,除了stride属性发生变化(相关的dims的strides信息同样进行transpose)外并无区别
,这两个Tensor只想同一个memory。
view 与transpose与permute的区别与联系
transpose与permute会实实在在的根据需求(要交换的dim)把相应的Tensor元素的位置进行调整, 而view 会将Tensor所有维度拉平成一维
(即按行,这也是为什么view操作要求Tensor是contiguous的原因),然后再根据传入的的维度
(只要保证各维度的乘积=总元素个数即可)信息重构出一个Tensor
。
# -*- coding: utf-8 -*-
import numpy as np
import torch as thdata_t = data.transpose(1, 2)
data_view = data.view(2, 3, 2)print('data_t', data_t)
print('data_view', data_view)
print(data_t.shape == data_view.shape)
print(data_t.is_contiguous())
# data_t_view = data_t.view(2, 2, 3)
Output:
当Tensor不是contiguous时,会报如下错误:
Pytorch中view, transpose, permute等方法的区别相关推荐
- Pytorch中view()方法和resize()方法的区别
1.view() 通过tensor.view方法可以调整tensor的形状,但必须保证调整前后元素总数一致.view不会修改自身的数据,返回的新tensor与源tensor共享内存,即更改其中一个,另 ...
- **Pytorch 中view函数和reshape函数的区别*
Pytorch 中view函数和reshape函数的区别(我是一名大一刚学计算机的学生 希望我的说法对你有帮助) 首先:要了解这个问题我们要先了解一个基本知识 张量的储存方式 跟据图片我们可以清楚的看 ...
- android add fragment,fragment中的add和replace方法的区别浅析
使用 FragmentTransaction 的时候,它提供了这样两个方法,一个 add , 一个 replace ,对这两个方法的区别一直有点疑惑. 我觉得使用 add 的话,在按返回键应该是回退到 ...
- java e.getmessage() null,浅谈Java异常的Exception e中的egetMessage()和toString()方法的区别...
Exception e中e的getMessage()和toString()方法的区别: 示例代码1: public class TestInfo { private static String str ...
- python predict_对Keras中predict()方法和predict_classes()方法的区别说明
1 predict()方法 当使用predict()方法进行预测时,返回值是数值,表示样本属于每一个类别的概率,我们可以使用numpy.argmax()方法找到样本以最大概率所属的类别作为样本的预测标 ...
- java——Scanner中nextLine()方法和next()方法的区别
遇到一个有意思的东西,在整理字符串这块知识的时候,发现我在用Scanner函数时,在字符串中加入空格,结果空格后面的东西没有输出来(/尴尬),不多说直接上代码: import java.util.Sc ...
- pytorch:深入理解 reshape(), view(), transpose(), permute() 函数
文章目录 前言 1. reshape() 2. view() ① 1 阶变高阶 1 阶变 2 阶 1 阶变 3 阶 1 阶变 4 阶 1 阶变 m 阶 ② 2 阶变 m 阶 ③ 3 阶变 m 阶 ④ ...
- Cesium 中两种添加 model 方法的区别
概述 Cesium 中包含两种添加 model 的方法,分别为: 通过 viewer.entities.add() 函数添加 通过 viewer.scene.primitives.add() 函数添加 ...
- jquery中prop()方法和attr()方法的区别浅析
引用:http://www.jb51.net/article/41170.htm 官方例举的例子感觉和attr()差不多,也不知道有什么区别,既然有了prop()这个新方法,不可能没用吧,那什么时候该 ...
- ExtJS中listener方法和handler方法的区别
listener方法和handler方法的区别在文档中的说明的太玄乎了,看不懂 listeners监听能够对一个click Event事件添加任意多个的事件响应处理函数 而handler处理只能够通过 ...
最新文章
- LeetCode Algorithm 剑指 Offer 06. 从尾到头打印链表
- Error No matching provisioning profiles found
- Lind.DDD.RedisClient~对StackExchange.Redis调用者的封装及多路复用技术
- pb怎么设置 allow editing_Deno TCP Echo Server 是怎么运行的?
- 通过CImageList加载图标 报错
- rt-thread驱动篇(02)---STM32F429板卡外设驱动添加
- matlab 图像处理之Refined Lee滤波
- Hive数据仓库中历史拉链表实践
- redis和zk实现分布式锁的优缺点
- Maven项目 混合编译Java和Scala
- Android存储空间总结
- 一步一步学RenderMonkey
- 项目集锦 | 易基因DNA羟甲基化5hmC测序研究成果
- 风影ASP.NET基础教学 4 验证控件
- 前端基础知识学习之-ShadowDOMLightDOM
- 可视化—三维图的绘制
- mysql分数占百分比查询
- 中国人寿张青南:中国人寿如何基于容器构建PaaS平台
- Java基础|一图总结Java File类(与IO密切相关)
- 2022-2028年中国高速铁路行业投资分析及前景预测报告
热门文章
- jQuery jQuery on()方法
- 并查集基础 模板题 hdu1232 畅通工程
- ubuntu14.04中mysql的安裝及utf8编码集配置
- HDU-2036 改革春风吹满地 (多边形面积求解)
- Jquery—对$()的总结
- 运行uiautomatorviewer.bat报错No suitable Java found
- 将两个数组首尾相连c语言,一个百度笔试中的首尾相连的珠子问题解法
- linux查看python安装库_linux下怎么查看python的包
- python中的超类_Python中的抽象超类
- ROS踩坑日记(2)----ERROR: cannot download default sources list from: