pytorch中的view()函数及一些操作

pytorch中的view()函数作用为重构张量的维度,相当于numpy中的resize()的功能。每次在代码中读到这个函数的用法总是要百度查,于是今天便对view函数做一个总结,方便以后查阅。
# 申明一个torch张量
import
a = torch.tensor([1, 2, 3, 4, 5, 6, 7, 8, 9])
print(a.shape, a) # torch.Size([9]) tensor([1, 2, 3, 4, 5, 6, 7, 8, 9])
# 对a向量resize,-1是按照总参数量 9 来匹配的
b = a.view(3, -1) # 效果等同于 a.view(3, 3)
print(b.shape, b) # torch.Size([3, 3]) tensor([[1, 2, 3],
        		  # [4, 5, 6],
        		  # [7, 8, 9]])
模拟模型训练中张量常见的四维的形式:
c = torch.ones((8, 64, 7, 7)) # 申明一个shape为[8, 64, 7, 7]的张量
print(c.shape) # torch.Size([8, 64, 7, 7])
b, n, h, w = c.shape
c_1 = c.view(b*n, 1, h, w) 
print(c_1.shape) # torch.Size([512, 1, 7, 7`在这里插入代码片`])
c_2 = c_1.view(1, b*n, -1, 49)
print(c_2.shape) # torch.Size([1, 512, 1, 49]) -1根据其他位置的来推测
此外,补充下常见配合view函数一起使用的函数:
# 对张量的拉平操作,将多维张量拉成一维向量
f = c.flatten(0) # 等同于c.flatten(0),torch.Size([25088])
f1 = c.flatten(1) # 从维度下标为1的地方开始拉 torch.Size([8, 3136])
f2 = c.flatten(2) # 从维度下标为2的地方开始拉 torch.Size([8, 64, 49])
f2 = f2.permute(2, 0, 1) # 交换维度顺序 torch.Size([49, 8, 64])
f3= c.flatten(3) # 相当不拉 torch.Size([8, 64, 7, 7])
补充与view具有相似功能的einops模块的rearrange函数:
# einops.rearrange()函数的有点就是直观
from einops import rearrange
r = rearrange(c, 'b c h w -> b (h w) c') # 这个函数很方便能应用在embadding操作中(hw)= l
print(r.shape) # torch.Size([8, 49, 64])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值