Pytorch实现n个向量的归一化

一、需求

        一个张量,有n个向量,我要做的是对这每个向量都除以它自己的模(这个模就是范数,可以是L1范数或者L2范数)。如下:

二、具体实现

        代码:

import torch
import torch.nn as nn
import torch.nn.functional as F

# suppose n=10, then there are 10 vectors in a tensor, 
# and each vector has 3 dimension
n_vectors = torch.zeros(10, 3)
# initialize each vectors randomly
n_vectors=nn.init.uniform_(tensor=n_vectors, a=-5, b=5)
print(n_vectors)
# use official normalization method of pytorch
n_vectors = F.normalize(n_vectors, p=2, dim=1)
print(n_vectors)

        输出:

tensor([[ 3.4124,  0.0452, -1.3099],
        [-0.9727, -0.0567,  3.2670],
        [-0.9700,  4.8445, -0.5155],
        [-2.4775, -3.6286, -4.6726],
        [ 0.1190, -1.6225, -3.9567],
        [ 3.5483, -4.6952, -3.9193],
        [ 3.4525, -4.3136, -1.3532],
        [ 3.2062,  0.8937, -1.3886],
        [ 2.5678,  2.5092, -4.6496],
        [ 4.5103, -2.0436, -0.7519]])
tensor([[ 0.9335,  0.0124, -0.3583],
        [-0.2853, -0.0166,  0.9583],
        [-0.1953,  0.9752, -0.1038],
        [-0.3863, -0.5657, -0.7285],
        [ 0.0278, -0.3793, -0.9249],
        [ 0.5018, -0.6640, -0.5543],
        [ 0.6069, -0.7583, -0.2379],
        [ 0.8890,  0.2478, -0.3850],
        [ 0.4371,  0.4271, -0.7915],
        [ 0.9005, -0.4080, -0.1501]])

        备注:

        0.9335=3.4124/math.sqrt(3.4124×3.4124+0.0452×0.0452+(-1.3099)×(-1.3099))
        0.0124=0.0452/math.sqrt(3.4124×3.4124+0.0452×0.0452+(-1.3099)×(-1.3099))
        -0.3583=-1.3099/math.sqrt(3.4124×3.4124+0.0452×0.0452+(-1.3099)×(-1.3099))

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Pytorch Geometric提供了一些内置的归一化和池化方法,可以方便地用于GCN模型中。下面分别介绍这些方法的用法。 1. 归一化 Pytorch Geometric提供了两种常见的归一化方法:对称归一化和随机游走归一化。 对称归一化: ```python import torch_geometric.transforms as T data = T.NormalizeSymm()(data) ``` 随机游走归一化: ```python import torch_geometric.transforms as T data = T.RandomWalk()(data) ``` 其中,`data`是一个包含图数据的对象,比如`torch_geometric.data.Data`。 2. 池化 池化操作可以将一张大图缩小到一张小图,从而减少模型参数和计算量。Pytorch Geometric提供了几种常见的池化方法,比如TopK池化、SAG Pooling和Diff Pooling。 TopK池化: ```python import torch_geometric.nn.pool as pool x, edge_index, batch = pool.topk(x, ratio=0.5, batch=batch) ``` 其中,`x`是节点特征矩阵,`edge_index`是边的索引矩阵,`batch`是节点所属的图的标识符。`ratio`是池化后每个图保留的节点数占原图节点数的比例。 SAG Pooling: ```python import torch_geometric.nn.pool as pool x, edge_index, _, batch, _, _ = pool.sag_pool(x, edge_index, batch) ``` 其中,`x`、`edge_index`和`batch`的含义同TopK池化。SAG Pooling使用节点嵌入向量计算每个节点的注意力权重,根据权重进行池化。 Diff Pooling: ```python import torch_geometric.nn as nn diffpool = nn.DiffPool(in_channels, hidden_channels, num_classes) x, edge_index, edge_attr, batch, perm, score = diffpool(x, edge_index) ``` 其中,`in_channels`是输入节点特征的维度,`hidden_channels`是池化后节点特征的维度,`num_classes`是分类的类别数。`x`、`edge_index`和`batch`的含义同TopK池化。Diff Pooling使用GraphSAGE卷积层计算每个节点的嵌入向量,根据嵌入向量进行池化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞机火车巴雷特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值