pyg aggregate函数

更新时间:2023-06-18 09:44:00 阅读: 评论:0

pyg aggregate函数
    Aggregates是一种在Pyg中使用的功能强大的函数。它计算一个给定张量各个维度上的元素之和、平均值、最小值和最大值等统计量。在本文中,我们将介绍聚合函数在Pyg中的使用、聚合函数的语义意义、以及如何在实际项目中使用聚合函数。
苍茫的天涯是我的爱
    一、Pyg中的聚合函数
    聚合函数是一个非常有用的函数,在Pyg中有两个分别为`to_den(x)`函数和`to_spar(x)`函数。我们使用`from torch_scatter import scatter_XXX`来调用对应的聚合函数,其中的XXX代表聚合函数的作用。Pyg中的聚合函数都是以scatter_开头的函数,例如:
网络分析法    scatter_add
    scatter_max
    scatter_mean
    scatter_min
    scatter_mul
    scatter_std
    scatter_sum
    scatter_var
    这些函数都接收两个关键字参数:`index`和`src`。其中,`index`是一个表示张量维度的张量,`src`是待聚合的张量,shape必须和index的前缀一样(前缀是指index第0到N-2维),例如:
    ```python
    from torch_scatter import scatter_add
    二、聚合函数的语义
    为了更深入地了解聚合函数的语义,请看以下代码:
    src = sor([1, 2, 3, 4, 5])
    output = scatter_sum(src, index=[1, 1, 2, 0, 1])
    # output = [4, 6, 3]
    ```
    聚合函数的语义非常直接,它计算src(通常是一个2D张量)的某些行的总和。在这种情况下,index个元素指定了每个行应该属于哪个聚合块。因此,[1, 1, 2, 0, 1]将src张量拆分为三个聚合块,其中第一个块由第0行和第1行组成,第二个块由第2行组成,第三个块由第3行和第4行组成。然后,聚合函数在每个块中执行聚合操作并返回结果。
    在本节中,我们将介绍如何在实际Pyg项目中使用聚合函数。首先介绍较为基础的一个应用,即在通过聚合函数实现图神经网络的邻居聚合池操作。
    在远古的GCN神经网络中,我们需要计算$x_{neighbors}^{(l)}=Su_{neighbors}W^{(l)}$,其中S是度矩阵的倒数的卷积,u_{neighbo
rs}是邻居节点的特征张量,W^{(l)}是需要学习的神经网络的参数矩阵。然后我们需要对$x_{neighbors}^{(l)}$进行退火、relu激活等操作得到 $x_{new}^{(l)}=ReLU(x_{neighbors}^{(l)}/\sqrt{d^{(l)}})$,其中$d^{(l)}$是所有邻居的个数加上自己的个数,即为$|neighbors_i|+1$。如果图中每个结点的度不同或者图变化频繁,我们可能需要采用何种操作,因此不同的图神经网络模型在进行信息汇聚时,需要在聚合函数上做出相应的改进。
    最基础的是GCN网络中的邻居聚合操作,我们首先模拟一个图,代码如下:
    ``` python
    # 简化如下图 adj列表方式来表示
    #  0 -- 1 -- 2
    #  |        |
    #  3 -- 4 -- 5
小班开学第一课
    edge_index = sor([row, col], dtype=torch.long)
    x = sor([
        [0.0,0.0], # node 0
        [0.0,1.0], # node 1
        [1.0,1.0], # node 2
        [1.0,0.0], # node 3手棒花
        [2.0,1.0], # node 4
形容女孩的词语
        [2.0,0.0], # node 5
    ], dtype=torch.float)
    # 对于稀疏图,可以使用to_spar和from_sciprt_spar_tensor提高计算效率。如下面的代码所示
    from torch_spar import coalesce
    edge_index, _ = coalesce(edge_index, None, x.size(0), x.size(0))
    # 恒等映射作为初始不可求的映射,一般来说我们需要像GCN,GAT等卷积神经网络进行训练,使其权重更新为可以求解的映射函数
    import Linear
    conv = GCNConv(in_channels=2, out_channels=16)
    x = conv(x=x, edge_index=edge_index)
    ```
    现在我们可以开始实现邻居池化操作:
    ``` python
    from import global_max_pool
    pooling = global_max_pool(x, sor([0, 0, 0, 0, 1, 1]))
    ```
金猴闹春    在这里,我们使用了global_max_pool函数进行邻居汇聚,您可以使用global_max_pool、global_median_pool、global_add_pool、global_mean_pool等函数。该函数把节点$\{0,1,2,3\}$汇聚为了一个张量,节点$\{4,5\}$也汇聚为了一个张量。这是因为我们将他们分别分为了batch 0和batch 1.最后得到的张量输出形状为(2,16),其中16是GCNCon中out_channel的值。
    需要注意的是,PyG的文档是基于1.7.0版本的,若运行以上代码时发现有undefined的情况,可以升级PyG的版本。
    以上就是较为基础的邻居池化操作,但在实际应用中,计算信息汇聚的需求不同,实现邻居池化操作的具体方法也存在差异。例如,使用DCGAN生成器时,我们可以使用copy和求和池化方法,例如:
    ``` python
    pooling = (z.view(z.size(0), z.size(1), 1, 1) * x).sum(dim=[2, 3])
武汉社保咨询电话
    ```
    在这个例子中,我们使用了PyTorch的标准方法,对每个节点的特征向量进行乘法。在接下来的操作中,汇聚张量将被称为生成器的输入。四大美人之西施
    总之,聚合函数是Pyg一个强大而广泛使用的函数。我们在实践中使用这些函数,很容易地实现信息汇聚和汇总操作,例如图神经网络中的邻居聚合等任务。了解这些函数的语义和使用场景,可以有效地提高我们的开发效率和能力。

本文发布于:2023-06-18 09:44:00,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/982295.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:函数   聚合   操作
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图