pytorch张量运算基础

pytorch张量运算基础

(1)随机创建秩为2的张量:

>>> torch.rand(2,2)
tensor([[0.1380, 0.6323],
        [0.1372, 0.3706]])

(2)由列表创建张量,改变张量中的一个值

>>> x = torch.tensor([[0,0,1],[1,1,1],[0,0,0]])
>>> x
tensor([[0, 0, 1],
        [1, 1, 1],
        [0, 0, 0]])
>>> x[0][0]=5
>>> x
tensor([[5, 0, 1],
        [1, 1, 1],
        [0, 0, 0]])

(3)使用ones()和zeros()函数创建张量

>>> torch.zeros(2,2)
tensor([[0., 0.],
        [0., 0.]])

(4)张量的加法运算

>>> torch.ones(1,2) + torch.ones(1,2)
tensor([[2., 2.]])

(5)使用to()函数将张量复制进CPU或GPU

>>> cpu_tensor = torch.rand(2)
>>> cpu_tensor
tensor([0.5383, 0.4437])
>>> cpu_tensor.device
device(type='cpu')
>>> gpu_tensor = cpu_tensor.to('cuda')
>>> gpu_tensor.device
device(type='cuda', index=0)

(6)求张量中的最大元素

>>> torch.rand(2,2).max()
tensor(0.8762)
>>> torch.rand(2,2).max().item()
0.9710603952407837

(7)在原函数后面加下划线,可用于节省内存

>>> random_tensor = torch.rand(2,2)
>>> random_tensor.log2()
tensor([[-0.1777, -8.2509],
        [-0.3882, -2.2375]])
>>> random_tensor.log2_()
tensor([[-0.1777, -8.2509],
        [-0.3882, -2.2375]])

(8)张量的变形view()和reshape()函数

如MNIST数据集为28×28的灰度图像集合,但其被变换为长度为784的数组,后续转换为1×28×28的张量(1为通道数)

关于view()和reshape()函数的区别:

view()会处理为原张量的一个视图,如果底层数据发生改变,视图也会发生改变,如果视图不连续,则会报错,reshape()会在后台完成这些操作

因此推荐使用reshape()函数!!!!!!

>>> flat_tensor = torch.rand(784)
>>> viewed_tensor = flat_tensor.view(1,28,28)
>>> viewed_tensor.shape
torch.Size([1, 28, 28])
>>> reshaped_tensor = flat_tensor.reshape(1,28,28)
>>> reshaped_tensor.shape
torch.Size([1, 28, 28])

(9)交换张量维度

图像一般存储为[height, width, channel] 的张量,但是pytorch通常按照[channel, height, width]处理,因此可以使用permute()函数交换维度,permute()函数中为维度的索引值

>>> hwc_tensor = torch.rand(640,480,3)
>>> chw_tensor = hwc_tensor.permute(2,0,1)
>>> chw_tensor.shape
torch.Size([3, 640, 480])

(10)张量广播

张量广播的条件:

两个张量维度大小相等(我理解的是列数相等)

并且其中一个维度大小为1(其中一个的行数为1)

比如将一个[2, 2]的张量增加成[3, 3]的张量则会报错

但是将一个[1, 3]的张量增加为[3,3]的张量则可行

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值