pytorch张量运算基础

这篇博客介绍了PyTorch中张量的基础操作,包括随机创建、列表创建、值修改、ones()和zeros()函数的使用、张量加法、在CPU与GPU间迁移、求最大值、节省内存的操作、张量变形以及维度交换。此外,还阐述了张量广播的规则和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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]的张量则可行

PyTorch提供了丰富的张量算术运算,可以对张量进行各种复杂的运算。你可以使用PyTorch的算术函数来执行加法、减法、乘法和除法操作。例如,你可以使用add()函数执行张量的加法运算,subtract()函数执行减法运算,multiply()函数执行乘法运算,divide()函数执行除法运算。 此外,PyTorch还支持复杂数的算术运算,通过安装"pytorch-complex-tensor"库,你可以使用该库中提供的ComplexTensor类来进行复杂数的模拟算术运算,该库支持渐变。你可以使用ComplexTensor类来创建初始张量,并在其中执行复杂的算术运算。 下面是一个使用PyTorch进行张量算术运算的例子: ``` import torch # 创建两个张量 a = torch.tensor([1, 2, 3]) b = torch.tensor([4, 5, 6]) # 执行加法运算 c = torch.add(a, b) # 执行减法运算 d = torch.subtract(a, b) # 执行乘法运算 e = torch.multiply(a, b) # 执行除法运算 f = torch.divide(a, b) # 输出结果 print(c) # tensor([5, 7, 9]) print(d) # tensor([-3, -3, -3]) print(e) # tensor([4, 10, 18]) print(f) # tensor([0.25, 0.4, 0.5]) ``` 通过使用PyTorch张量算术运算,你可以对张量进行各种复杂的运算,并得到所需的结果。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [[PyTroch系列-7]:PyTorch基础 - 张量的算术运算](https://blog.youkuaiyun.com/HiWangWenBing/article/details/119428023)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [pytorch-complex-tensor:Pytorch的非官方复张量和标量支持](https://download.youkuaiyun.com/download/weixin_42128537/18698908)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值