PyTorch概述(六)---View

Tensor.view(*shape)-->Tensor

  • 返回一个新的张量同之前的张量具有相同的数据,但是具有不同的形状;
  • 返回的张量同之前的张量共享相同的数据,必须具有相同数目的元素,可能具有不同的形状;
  • 对于经过view操作的张量,新的尺寸必须同原始的张量大小和步长兼容;
  • 每一个新的观察维度必须或者是一个原始维度的子空间;
  • 或者跨越原始维度,满足以下条件:
  • 不满足上述条件,在不拷贝原始张量的情况下将不会view成功;
  • 当不了解是否一个view可以执行时,推荐使用reshape();
  • reshape()返回一个view如果形状是兼容的,且复制原始的张量,等效于调用contiguous();

参数

  • shape(torch.Size or int)---要求的尺寸

实例

python 复制代码
import torch

x=torch.randn(4,4)
x.size()
#torch.Size([4,4]}
y=x.view(16)
y.size()
#torch.Size([16])
z=x.view(-1,8) #the size -1 is inferred from other dimensions
z.size()
#torch.Size([2,8])

a=torch.randn(1,2,3,4)
a.size()
#torch.Size([1,2,3,4])
b=a.transpose(1,2) #swap 2nd and 3rd dimension
b.size()
#torch.Size([1,3,2,4])
c=a.view(1,3,2,4) #Does not change tensor layout in memeory
c.size()
#torch.Size([1,3,2,4])
torch.equal(b,c)
#Flase

view(dtype)-->Tensor

  • 返回一个同原始张量具有相同数据的新张量,但是具有不同的数据类型;
  • 如果dtype的单元尺寸不同于原始张量dtype的尺寸;
  • 那么输出的最后一个维度的大小将按比例缩放;
  • 比如:如果dtype的单元尺寸两倍于原始dtype的单元尺寸;
  • 那么原始张量中的最后一个维度中的单元,两两一组进行合并;
  • 新张量的最后一个维度的尺寸将会是原始张量的最后一个维度的一半;
  • 如果新的张量的dtype单元尺寸是原始张量的dtype单元尺寸的一半;
  • 那么原始张量中的最后一个维度将一分为2;
  • 新张量的最后一个维度的尺寸将会使原始张量最后一个维度的2倍;
  • 以上实例描述可能得话,必须满足以下条件:
  • self.dim()必须大于0;
  • self.stride(-1)必须为1;
  • 还有,如果dtype的单元尺寸大于原始张量的dtype的尺寸,以下条件必须同样满足:
  • self.size(-1)必须是对dtype单元尺寸的比率可整除的;
  • self.storage_offset()必须是对dtype单元尺寸的比率可整除的;
  • 所有维度的步长,除了最后一个维度外,必须是对dtype单元尺寸的比率可整除的;
  • 如果以上条件任一不满足,将会出错;
  • torchscript不支持上述描述的这种重载,在torchscript中使用将会引起未定义的错误;

参数

  • dtype(torch.dtype)---要求的dtype类型

实例

python 复制代码
import torch

x=torch.randn(4,4)
x
#tensor([[ 0.9482, -0.0310,  1.4999, -0.5316],
#       [-0.1520,  0.7472,  0.5617, -0.8649],
#       [-2.4724, -0.0334, -0.2976, -0.8499],
#       [-0.2109,  1.9913, -0.9607, -0.6123]])
x.dtype
#torch.float32

y=x.view(torch.int32)
y
# tensor([[ 1064483442, -1124191867,  1069546515, -1089989247],
#         [-1105482831,  1061112040,  1057999968, -1084397505],
#         [-1071760287, -1123489973, -1097310419, -1084649136],
#         [-1101533110,  1073668768, -1082790149, -1088634448]],
#     dtype=torch.int32)
y[0,0]=1000000000
x
# tensor([[ 0.0047, -0.0310,  1.4999, -0.5316],
#         [-0.1520,  0.7472,  0.5617, -0.8649],
#         [-2.4724, -0.0334, -0.2976, -0.8499],
#         [-0.2109,  1.9913, -0.9607, -0.6123]])
x.view(torch.cfloat)
# tensor([[ 0.0047-0.0310j,  1.4999-0.5316j],
#         [-0.1520+0.7472j,  0.5617-0.8649j],
#         [-2.4724-0.0334j, -0.2976-0.8499j],
#         [-0.2109+1.9913j, -0.9607-0.6123j]])
x.view(torch.cfloat).size()
#torch.Size([4,2])
x.view(torch.uint8)
# tensor([[  0, 202, 154,  59, 182, 243, 253, 188, 185, 252, 191,  63, 240,  22,
#            8, 191],
#         [227, 165,  27, 190, 128,  72,  63,  63, 146, 203,  15,  63,  22, 106,
#           93, 191],
#         [205,  59,  30, 192, 112, 206,   8, 189,   7,  95, 152, 190,  12, 147,
#           89, 191],
#         [ 43, 246,  87, 190, 235, 226, 254,  63, 111, 240, 117, 191, 177, 191,
#           28, 191]], dtype=torch.uint8)
x.view(torch.uint8).size()
#torch.Size([4,16])
相关推荐
数字会议深科技17 分钟前
深科技 | 高端会议室效率升级指南:无纸化会议系统的演进与价值
大数据·人工智能·会议系统·无纸化·会议系统品牌·综合型系统集成商·会议室
曦云沐17 分钟前
轻量却强大:Fun-ASR-Nano-2512 语音识别模型上手指南
人工智能·语音识别·asr·fun-asr-nano
少年白char32 分钟前
【AI漫剧】开源自动化AI漫剧生成工具 - 从文字到影像:AI故事视频创作的全新可能
运维·人工智能·自动化
容智信息34 分钟前
容智Report Agent智能体驱动财务自动化,从核算迈向价值创造
大数据·运维·人工智能·自然语言处理·自动化·政务
Allen正心正念20251 小时前
AWS专家Greg Coquillo提出的8层Agentic AI架构分析
人工智能·架构·aws
JoannaJuanCV1 小时前
自动驾驶—CARLA仿真(25)synchronous_mode demo
人工智能·机器学习·自动驾驶·carla
骚戴1 小时前
大语言模型(LLM)进阶:从闭源大模型 API 到开源大模型本地部署,四种接入路径全解析
java·人工智能·python·语言模型·自然语言处理·llm·开源大模型
audyxiao0011 小时前
如何降低对标注数据的依赖,实现多病种检测与病灶精准定位?请看此文
人工智能·多病种检测·病灶精准定位·医学影像ai
鲨莎分不晴1 小时前
强化学习第七课 —— 策略网络设计指南:赋予 Agent“大脑”的艺术
网络·人工智能·机器学习
志凌海纳SmartX1 小时前
AI知识科普丨什么是 AI Agent?
人工智能