unsqueeze,squeeze,repeat,expand,expand_as应用示例及其详细说明

本文详细介绍了PyTorch中张量的squeeze、unsqueeze、expand和repeat操作,包括它们的功能、用法以及注意事项。通过示例代码解释了这些操作如何改变张量的形状,帮助理解在深度学习模型中如何处理数据维度。
摘要由CSDN通过智能技术生成
import torch
box_a=torch.tensor([[1,2,3],[1,2,3]])
print(box_a[:, 2:].squeeze(0).shape)
print(box_a[:, 2:].shape)
# torch.Size([2, 1])
# torch.Size([2, 1])
print("#################################")
print(box_a[:, 2:].squeeze(1).shape)
print(box_a[:, 2:].shape)
'''squeeze 只能去掉维度为1的维度,如果目标维度不是1
比如是2,就不可以去掉'''
# torch.Size([2])
# torch.Size([2, 1])
print("#################################")
print(box_a[:, 2:].unsqueeze(0).shape)
print(box_a[:, 2:].shape)
'''unsqueeze 是在目标维度上增加一个维度,示例为在
第一个维度dim=0的位置添加一个维度'''
# torch.Size([1, 2, 1])
# torch.Size([2, 1])
print("#################################")
print(box_a[:, 2:].shape)
print(box_a[:, 2:].expand(2,1000).shape)
'''expand 只能扩展size为1的维度
参考 :https://blog.csdn.net/weixin_39504171/article/details/106090626
'''
# torch.Size([2, 1])
# torch.Size([2, 1000])
print("#################################")
print(box_a[:, 2:].shape)
print(box_a.shape)
print(box_a[:, 2:].expand_as(box_a).shape)
print(box_a[:, 2:])
print(box_a)
print(box_a[:, 2:].expand_as(box_a))
# torch.Size([2, 1])
# torch.Size([2, 3])
# torch.Size([2, 3])
# tensor([[3],
#         [3]])
# tensor([[1, 2, 3],
#         [1, 2, 3]])
# tensor([[3, 3, 3],
#         [3, 3, 3]])
'''expand_as 可以扩展到目标维度,只不过expand_as '''
# print(box_a[:, 2:].expand_as(box_a.unsqueeze(0)))
'''expand_as 比较复杂的示例 torch.Size([2, 1, 1]) 扩展到 torch.Size([4, 7, 1]) '''
# print(box_a[:, 2:].unsqueeze(1).expand_as(torch.rand(2,7,1)))
print(box_a[:, 2:].unsqueeze(1).shape)
# torch.Size([2, 1, 1])
print("#################################")
'''repeat 操作 '''
print(box_a.shape)
'''repeat (1)操作用来阔展维度 相当于 unsqueeze(0) '''
print(box_a.repeat(1,1,1,1).shape)
# RuntimeError: Number of dimensions of repeat dims can not be
# smaller than number of dimensions of tensor
'''复制后的最小维度数目不能小于原先的维度数目,比如原来是两个维度,
复制后的目标只有一个维度就不行了'''
# print(box_a.repeat(1).shape)

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值