torch.pow()的使用举例

参考链接: torch.pow()
在这里插入图片描述

功能:
实现张量和标量之间逐元素求指数操作,
或者在可广播的张量之间逐元素求指数操作.

代码实验展示:

Microsoft Windows [版本 10.0.18363.1256]
(c) 2019 Microsoft Corporation。保留所有权利。

C:\Users\chenxuqi>conda activate ssd4pytorch1_2_0

(ssd4pytorch1_2_0) C:\Users\chenxuqi>python
Python 3.7.7 (default, May  6 2020, 11:45:54) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.manual_seed(seed=20200910)
<torch._C.Generator object at 0x000001DB5C50D330>
>>>
>>> a = torch.randn(4)
>>> a
tensor([ 0.2824, -0.3715,  0.9088, -1.7601])
>>> torch.pow(a, 2)
tensor([0.0797, 0.1380, 0.8259, 3.0980])
>>>
>>>
>>>
>>> exp = torch.arange(2.0, 6.0)
>>> a = torch.arange(1., 5.)
>>> a
tensor([1., 2., 3., 4.])
>>> exp
tensor([2., 3., 4., 5.])
>>> torch.pow(a, exp)
tensor([1.0000e+00, 8.0000e+00, 8.1000e+01, 1.0240e+03])
>>>
>>>
>>>
>>>
>>>
>>> exp = torch.arange(1., 5.)
>>> base = 2
>>> exp
tensor([1., 2., 3., 4.])
>>> torch.pow(base, exp)
tensor([ 2.,  4.,  8., 16.])
>>>
>>>

代码实验展示:

(base) PS C:\Users\chenxuqi> python
Python 3.7.4 (default, Aug  9 2019, 18:34:13) [MSC v.1915 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.manual_seed(seed=20200910)
<torch._C.Generator object at 0x000001269B1F2A90>
>>> a = torch.randn(4)
>>> a
tensor([ 0.2824, -0.3715,  0.9088, -1.7601])
>>> torch.pow(a, 2)
tensor([0.0797, 0.1380, 0.8259, 3.0980])
>>> a.pow(2)
tensor([0.0797, 0.1380, 0.8259, 3.0980])
>>>
>>>
>>>
>>> exp = torch.arange(2.0, 6.0)
>>> a = torch.arange(1., 5.)
>>> a
tensor([1., 2., 3., 4.])
>>> exp
tensor([2., 3., 4., 5.])
>>> torch.pow(a, exp)
tensor([1.0000e+00, 8.0000e+00, 8.1000e+01, 1.0240e+03])
>>> a.pow(exp)
tensor([1.0000e+00, 8.0000e+00, 8.1000e+01, 1.0240e+03])
>>>
>>>
>>>
>>> exp = torch.arange(1., 5.)
>>> base = 2
>>> exp
tensor([1., 2., 3., 4.])
>>> torch.pow(base, exp)
tensor([ 2.,  4.,  8., 16.])
>>> base.pow(exp)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'int' object has no attribute 'pow'
>>> exp.pow(base)
tensor([ 1.,  4.,  9., 16.])
>>>
>>>
>>>  
### 对比学习中的Centering操作概念与应用 在对比学习框架下,中心化(centering)是一种用于改进表征学习的技术。该技术旨在优化嵌入空间内的样本分布,使得来自相同类别的样本聚集在一起形成紧凑的簇,而不同类别间的距离则尽可能增大。 #### Centering操作的作用机制 为了实现这一点,中心化引入了一个可学习的向量$c$作为各类别或特定模态(如红外图像和可见光图像)的代表点[^1]。对于每一个输入$x_i$及其对应的正例$a_i^+$ 和一组负例$\{a_j^-\}_{j=1}^{N}$, 中心化的目的是调整这些样本的位置,使其更接近于所属类别的中心$c_k$, 同时远离其他类别的中心: $$L_{\text {center }}=\sum_{i}\left(\|f(x)-c_{y(i)} \|_2^2+\lambda \cdot\|\nabla f(x)\|_F^2\right)$$ 这里$f()$ 表示编码器网络; $c_y(i)$ 是第$i$个样本真实标签对应类别的中心; $\lambda$ 控制着梯度范数惩罚项的影响程度[^3]。 #### 应用场景举例 当应用于跨模态匹配任务时,比如融合红外(IR)和可见光(VIS)两种不同类型的数据源,可以通过定义两个独立但共享部分参数的空间来分别处理这两种类型的输入,并通过中心化约束让每种模式下的同类样本更加凝聚,从而提高模型对齐能力并增强鲁棒性。 ```python import torch from torch import nn class ContrastiveLossWithCenter(nn.Module): def __init__(self, num_classes, feat_dim, alpha=0.5, beta=0.5, temperature=0.5): super(ContrastiveLossWithCenter, self).__init__() # 初始化每个类别的中心点 self.centers = nn.Parameter(torch.randn(num_classes, feat_dim)) ... def forward(self, features, labels): batch_size = features.size(0) # 计算每个样本与其相应类别中心的距离平方和 diff = features - self.centers.index_select(dim=0, index=labels).expand_as(features) loss_center = (diff.pow(2)).mean() ... return total_loss ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值