Python(TensorFlow和PyTorch)及C++注意力网络导图

news2024/11/24 10:28:22

🎯要点

  1. 谱图神经网络
  2. 计算注意力分数
  3. 对比图神经网络、卷积网络和图注意力网络
  4. 药物靶标建模学习和预测相互作用
  5. 腹侧和背侧皮质下结构
  6. 手写字体字符序列文本识别
  7. 组织病理学图像分析
  8. 长短期记忆财务模式预测相关性
  9. 生物医学图像特征学习和迭代纠正
    在这里插入图片描述

Python注意力机制

对于图卷积网络,图卷积运算产生邻居节点特征的归一化和。
h i ( l + 1 ) = σ ( ∑ j ∈ N ( i ) 1 c i j W ( l ) h j ( l ) ) h_i^{(l+1)}=\sigma\left(\sum_{j \in N (i)} \frac{1}{c_{i j}} W^{(l)} h_j^{(l)}\right) hi(l+1)=σ jN(i)cij1W(l)hj(l)
其中 N ( i ) N (i) N(i) 是其一跳邻居的集合(要在集合中包含 v i v_i vi,只需向每个节点添加一个自循环), c i j = ∣ N ( i ) ∣ ∣ N ( j ) ∣ c_{i j}=\sqrt{| N (i)|} \sqrt{| N (j)|} cij=N(i) N(j) 是基于图结构的归一化常数, σ \sigma σ 是激活函数(图卷积网络使用 ReLU), W ( l ) W^{(l)} W(l) 是节点级特征的共享权重矩阵转变。

图注意力网络引入了注意力机制来替代静态归一化卷积运算。下面是根据层 l l l 的嵌入计算层 l + 1 l+1 l+1 的节点嵌入 h i ( l + 1 ) h_i^{(l+1)} hi(l+1) 的方程。
在这里插入图片描述
z i ( l ) = W ( l ) h i ( l ) ( 1 ) z_i^{(l)}=W^{(l)} h_i^{(l)}\qquad(1) zi(l)=W(l)hi(l)(1)

e i j ( l ) = LeakyReLU ⁡ ( a ⃗ ( l ) T ( z i ( l ) ∥ z j ( l ) ) ) ( 2 ) e_{i j}^{(l)}=\operatorname{LeakyReLU}\left(\vec{a}^{(l)^T}\left(z_i^{(l)} \| z_j^{(l)}\right)\right)\qquad(2) eij(l)=LeakyReLU(a (l)T(zi(l)zj(l)))(2)

α i j ( l ) = exp ⁡ ( e i j ( l ) ) ∑ k ∈ N ( i ) exp ⁡ ( e i k ( l ) ) ( 3 ) \alpha_{i j}^{(l)}=\frac{\exp \left(e_{i j}^{(l)}\right)}{\sum_{k \in N (i)} \exp \left(e_{i k}^{(l)}\right)}\qquad(3) αij(l)=kN(i)exp(eik(l))exp(eij(l))(3)

h i ( l + 1 ) = σ ( ∑ j ∈ N ( i ) α i j ( l ) z j ( l ) ) ( 4 ) h_i^{(l+1)}=\sigma\left(\sum_{j \in N (i)} \alpha_{i j}^{(l)} z_j^{(l)}\right)\qquad(4) hi(l+1)=σ jN(i)αij(l)zj(l) (4)

方程(1)是下层嵌入 h i ( l ) h_i^{(l)} hi(l)的线性变换, W ( l ) W^{(l)} W(l)是其可学习的权重矩阵。方程(2)计算两个邻居之间的成对非标准化注意力得分。

方程 1:

def edge_attention(self, edges):
    z2 = torch.cat([edges.src['z'], edges.dst['z']], dim=1)
    a = self.attn_fc(z2)
    return {'e' : F.leaky_relu(a)}

方程 2:

def edge_attention(self, edges):
    z2 = torch.cat([edges.src['z'], edges.dst['z']], dim=1)
    a = self.attn_fc(z2)
    return {'e' : F.leaky_relu(a)}

在这里,它首先连接两个节点的 z z z 嵌入,其中 ||表示串联,然后取它和可学习权重向量 a ⃗ ( l ) \vec{a}^{(l)} a (l) 的点积,最后应用 LeakyReLU。这种形式的注意力通常称为附加注意力,与 Transformer 模型中的点积注意力形成对比。方程(3)应用 softmax 来标准化每个节点传入边上的注意力分数。方程(4)与图卷积网络类似。来自邻居的嵌入被聚合在一起,并按注意力分数进行缩放。

方程 3 和 4:

def reduce_func(self, nodes):
    alpha = F.softmax(nodes.mailbox['e'], dim=1)
    h = torch.sum(alpha * nodes.mailbox['z'], dim=1)
    return {'h' : h}

图注意力网络引入多头注意力来丰富模型容量并稳定学习过程。每个注意力头都有自己的参数,它们的输出可以通过两种方式合并:
h i ( l + 1 ) = ∥ k = 1 K σ ( ∑ j ∈ N ( i ) α i j k W k h j ( l ) ) h_i^{(l+1)}=\|_{k=1}^K \sigma\left(\sum_{j \in N (i)} \alpha_{i j}^k W^k h_j^{(l)}\right) hi(l+1)=k=1Kσ jN(i)αijkWkhj(l)

h i ( l + 1 ) = σ ( 1 K ∑ k = 1 K ∑ j ∈ N ( i ) α i j k W k h j ( l ) ) h_i^{(l+1)}=\sigma\left(\frac{1}{K} \sum_{k=1}^K \sum_{j \in N (i)} \alpha_{i j}^k W^k h_j^{(l)}\right) hi(l+1)=σ K1k=1KjN(i)αijkWkhj(l)

class MultiHeadLayer(nn.Module):
    def __init__(self, g, in_dim, out_dim, num_heads, merge='cat'):
        super(MultiHeadLayer, self).__init__()
        self.heads = nn.ModuleList()
        for i in range(num_heads):
            self.heads.append(Layer(g, in_dim, out_dim))
        self.merge = merge

    def forward(self, h):
        head_outs = [attn_head(h) for attn_head in self.heads]
        if self.merge == 'cat':
            return torch.cat(head_outs, dim=1)
        else:
            return torch.mean(torch.stack(head_outs))

定义两层注意力模型

class TAM(nn.Module):
    def __init__(self, g, in_dim, hidden_dim, out_dim, num_heads):
        super(TAM, self).__init__()
        self.layer1 = MultiHeadLayer(g, in_dim, hidden_dim, num_heads)
        self.layer2 = MultiHeadLayer(g, hidden_dim * num_heads, out_dim, 1)

    def forward(self, h):
        h = self.layer1(h)
        h = F.elu(h)
        h = self.layer2(h)
        return h

加载数据集

from xl import Graph
from xl.data import citation_graph as citegrh
import networkx as nx

def load_cora_data():
    data = citegrh.load_cora()
    features = torch.FloatTensor(data.features)
    labels = torch.LongTensor(data.labels)
    mask = torch.BoolTensor(data.train_mask)
    g = Graph(data.graph)
    return g, features, labels, mask

训练

import time
import numpy as np

g, features, labels, mask = load_cora_data()

net = TAM(g,
          in_dim=features.size()[1],
          hidden_dim=8,
          out_dim=7,
          num_heads=2)

optimizer = torch.optim.Adam(net.parameters(), lr=1e-3)

dur = []
for epoch in range(30):
    if epoch >= 3:
        t0 = time.time()

    logits = net(features)
    logp = F.log_softmax(logits, 1)
    loss = F.nll_loss(logp[mask], labels[mask])

    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

    if epoch >= 3:
        dur.append(time.time() - t0)

    print("Epoch {:05d} | Loss {:.4f} | Time(s) {:.4f}".format(
        epoch, loss.item(), np.mean(dur)))

👉更新:亚图跨际

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2124128.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java面试篇基础部分-Java 实现的I/O方式

Java I/O 在整个的java.io包中提供了5个重要的I/O类和1个接口类。5个类分别是File、OutputStream、InputStream、Writer、Reader ,1个接口是指Serializable序列化接口。具体的使用方式可以查看JDK的参考文档。 Java NIO 实现 Java NIO的实现内容主要有如下的三个核心内容 Sel…

使用Vue3.5的onWatcherCleanup封装自动cancel的fetch函数

前言 在欧阳的上一篇 这应该是全网最详细的Vue3.5版本解读文章中有不少同学对Vue3.5新增的onWatcherCleanup有点疑惑,这个新增的API好像和watch API回调的第三个参数onCleanup功能好像重复了。今天这篇文章来讲讲新增的onWatcherCleanup函数的使用场景:…

《 C++ 容器全景指南:五 》深入探索 C++ 标准库中的 stack 与 queue 容器适配器

1、引言 1.1、容器适配器的概念与应用 容器适配器(Container Adapters)是 C 标准库提供的一种特殊容器,它不是一种独立的容器,而是对其他标准容器的封装,用来实现特定的数据结构如栈(stack)和…

【信创】麒麟KOS上安装使用网络抓包工具Wireshark

原文链接:【信创】麒麟KOS上安装使用网络抓包工具Wireshark Hello,大家好啊!今天给大家带来一篇关于如何在麒麟桌面操作系统上安装和使用Wireshark的文章。Wireshark是一款强大的网络协议分析工具,广泛应用于网络故障排查、网络流…

Makefile学习总结

Makefile学习总结 目录 Makefile学习总结1. Makefile介绍2. Makefile规则3. Makefile文件里的赋值方法4. Makefile常用函数4.1 字符串替换和分析函数4.2 文件名函数4.3 其他函数 5. Makefile使用示例6、多级目录通用Makefile Demo6.1 一般通用Makefile的设计思想6.2 Demo分析 参…

DAY73

作业 pro文件&#xff1a; QT texttospeech 头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPushButton> //按钮类 #include <QLabel> //标签类 #include <QLineEdit> //行编译器类 #include…

【delphi】判断多显示器下,程序在那个显示器中

在 Delphi 中&#xff0c;如果你的电脑连接了多个显示器&#xff0c;可以通过以下步骤判断某个程序在哪个显示器上运行。 方法概述&#xff1a; 获取程序窗口的位置&#xff08;例如窗体的 Left、Top 坐标&#xff09;。使用 Screen.MonitorFromWindow 函数来确定该窗口所属的…

Hibernate QueryPlanCache 查询计划缓存引发的内存溢出

目录 1.排查方式2.结论3.解决办法 前言&#xff1a;在生产环境中有一个后端程序多次报oom然后导致程序中断。 1.排查方式 通过下载后端程序产生的oom文件&#xff0c;将oom文件导入MemoryAnalyzer程序分析程序堆内存使用情况。 1、将oom文件导入MemoryAnalyzer后可以看到概览信…

在银河麒麟服务器操作系统中设置SSH登录限制

在银河麒麟服务器操作系统中设置SSH登录限制 1、引言2、 步骤一&#xff1a;检查MaxStartups选项3、步骤二&#xff1a;修改MaxStartups选项4、步骤三&#xff1a;重启SSH服务 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、引言 在服务…

flask旧衣物捐赠系统—计算机毕业设计源码26577

摘要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#xff0c;应用软件的工作规…

【干货分享】Ftrans安全数据交换系统 搭建跨网数据传输通道

安全数据交换系统是一种专门设计用于在不同的网络、系统或组织之间安全地传输数据的软件或硬件解决方案。这种系统通常包含多种安全特性&#xff0c;以确保数据在传输过程中的保密性、完整性和可用性。 安全数据交换系统可以解决哪些问题&#xff1f; 安全数据交换系统主要解…

神经网络卷积层和最大池化

文章目录 一、卷积层原理二、相关函数的概念三、卷积层的应用四、最大池化原理五、最大池化案例 一、卷积层原理 ./ 当前目录&#xff1b;…/ 上级目录 父类&#xff08;也称为基类或超类&#xff09;是指在类继承体系中被其他类继承的类。也就是被其他子类进行调用的类 当In_…

「豆包 Marscode 体验官」AI 加持的云端 IDE——三种方法高效开发前后端聊天交互功能

以下是「豆包 MarsCode 体验官」优秀文章&#xff0c;作者努力的小雨。 豆包 MarsCode 豆包MarsCode 编程助手支持的 IDE: 支持 Visual Studio Code 1.67.0 及以上版本&#xff0c;以及 JetBrains 系列 IDE&#xff0c;如 IntelliJ IDEA、Pycharm 等&#xff0c;版本要求为 22…

016.PL-SQL编程—过程

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…

服务器测试之GPU基础汇总

GPU基础汇总 1.GPU简介 1.1.什么是GPU GPU英文全称Graphic Processing Unit&#xff0c;中文翻译为“图形处理器”。一个专门的图形核心处理器。GPU是显示卡的“大脑”&#xff0c;决定了该显卡的档次和大部分性能&#xff0c;同时也是2D显示卡和3D显示卡的区别依据。可以形…

Flask 第三课 -- 第一个应用

上一章节我们已经成功安装了 Flask&#xff0c;接下来我们可以创建一个简单的 Flask 应用。 首先&#xff0c;创建一个名为 app.py 的文件&#xff0c;并添加以下内容&#xff1a; from flask import Flaskapp Flask(__name__)app.route(/) def hello_world():return Hello,…

网络拓扑结构介绍

这张图展示了一个复杂的网络拓扑结构&#xff0c;它包括了多个运营商的接入、负载均衡、安全防护以及数据处理等多个关键环节。整个网络通过精心设计的架构和高效的节点连接&#xff0c;实现了数据的快速传输和安全处理。 一、各个模块介绍 运营商接入&#xff1a; 移动、电信…

论文速读|形机器人的高速和抗冲击远程操作

论文地址&#xff1a;https://arxiv.org/pdf/2409.04639 本文提出了一种综合解决方案&#xff0c;用于远程控制类人机器人&#xff0c;实现了高速度和冲击抵抗的操作。通过结合无校准的运动捕捉和重定标、低延迟全身运动流式传输工具箱和高带宽的摆线驱动器&#xff0c;显著提高…

【Python报错已解决】ValueError: All arrays must be of the same length

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一&#xff1a;调整数组长度2.2 步骤二…

数据流图的例题2

答案选B 解析&#xff1a; 第一个错误&#xff0c;E1和E2是外部实体&#xff0c;实体之间不可能有数据传输&#xff0c;DF2错误 第二个错误&#xff0c;DF6是外部实体把数据传到存储。外部实体必须把数据传到加工&#xff0c;进行加工之后才能对数据存储&#xff0c;DF6错误…