毕业设计网站选题,吉林seo快速排名,网站创建的流程是什么,logo查询有没有注册过一、说明 图网络-GNN#xff08;Graph Neural Networks#xff09;是近几年研究的主题之一#xff0c;虽不及深度神经网络那么火爆#xff0c;但在一些领域#xff0c;如分子化学方面是不得不依赖的理论。本文就一些典型意义的图神经网络消息传递展开阐述。 二、图网络简述… 一、说明 图网络-GNNGraph Neural Networks是近几年研究的主题之一虽不及深度神经网络那么火爆但在一些领域如分子化学方面是不得不依赖的理论。本文就一些典型意义的图神经网络消息传递展开阐述。 二、图网络简述 图神经网络是一种用于以图形式呈现的数据的神经网络。图形是由顶点节点和边组成的空间结构。有许多结构表示为图形三维空间xyz中的结构如物质分子例如咖啡因、蛋白质由氨基酸组成、DNA、计算机网络以及社交网络等结构。以下是一些使用 Wolfram Mathematica 制作的例子 咖啡因的分子结构 蛋白 蛋白质中原子的 XYZ 坐标 社交网络 社交网络社区 基本上每个节点代表一个人、一个原子、一个金融交易这些节点通过边连接在这些实体之间建立关系。在人与人之间这可能是领带的强度、社交距离、亲密程度。在分子结构中的原子中这些边缘可能是共价键。在金融交易中这些边缘可以定义某人与欺诈交易的距离。 考虑到社交网络的例子如上图我们有密集连接的人集群可能与“影响者”有关也有薄弱环节弱纽带它们连接不同的人群允许信息的多样性。当我们亲自或通过社交媒体相互交谈时我们的信息会通过这个社交网络传播并且可能会受到其内容的变形和误解的影响。原子及其电磁特性也会发生同样的情况其他原子离得越近它们受这些电磁特性的影响就越大。因此经过一段距离后这种影响会逐渐消失。此外如果允许这种影响渗透到所有网络结构中则由于饱和整个网络可能会收敛到单一状态。
三、图网络的向量模型 但是我们如何才能用数学方式来表示这些复杂的关系以便能够对这些相互作用进行建模呢首先我们应该定义每个参与者之间的联系。这是通过邻接矩阵完成的其中相同的个体被放置在该矩阵的行和列中 基于邻接矩阵的网络结构 此邻接矩阵中的每个数字 1 都表示一个连接。我们有一个 5 x 5 矩阵其中节点 1 到 5 分别放置在线和列中。所以如果你拿个体 2他只与个体 5 相连。个体 1 连接到个体 3 和 5依此类推。为了绘制这个网络我使用了以下代码
import numpy as np
import networkx as nxAdj np.array([[0, 0, 1, 0, 1],[0, 0, 0, 0, 1], [0, 0, 0, 1, 1], [0, 0, 1, 0, 1], [1, 1, 0, 0, 0]]
)
g nx.from_numpy_array(Adj)
pos nx.circular_layout(g)fig, ax plt.subplots(figsize(8,8))
nx.draw(g, pos, with_labelsTrue, labels{i: i1 for i in range(g.number_of_nodes())}, node_color#f78c31, axax, edge_colorgray, node_size1000, font_size20, font_familyDejaVu Sans) 现在我们将邻接矩阵乘以由行数组成的向量。因此我们将得到一个 5 x 5 矩阵乘以 5 x 1 向量。这意味着 n x p 乘以 p x m 将得到一个 n x m 向量。在本例中5 x 1 向量
H Adj np.array([1,2,3,4,5]).reshape(-1,1) 请注意为了进行此乘法您需要将 p x m 向量转置为 [1,2,3,4,5]并逐个元素乘以邻接矩阵和总和的那行的每个元素。结果是相连邻域的总和。按住 H 一会儿。 现在我们将找到对角线度矩阵它由对角线中的邻域大小组成即矩阵中每一列的总和 D np.zeros(Adj.shape)
np.fill_diagonal(D, Adj.sum(axis0)) 对角线度矩阵
现在我们将为每个边分配一个权重。我们通过将恒等矩阵除以对角度矩阵来做到这一点。
D_inv np.linalg.inv(D) 倒置度矩阵
通过将倒置的 D 乘以邻接矩阵我们将得到一个平均的邻接矩阵 平均邻接矩阵 当我们处理一个没有单个值的节点而是特征向量的集合时平均的概念非常重要就像图卷积网络一样。 但是我们真正想要操作的是消息传递算法如下所示 反复应用的帽子将允许信息在图网络中流动。假设波浪号等于邻接矩阵加单位矩阵我们有 g nx.from_numpy_array(Adj)
Adj_tilde Adj np.eye(g.number_of_nodes()) 现在我们需要创建 D 波浪号的平方根。我们创建一个零矩阵并将邻接矩阵波浪号的线和值相加。
D_tilde np.zeros_like(A_tilde)
np.fill_diagonal(D_tilde, A_tilde.sum(axis1).flatten()) 然后我们计算 D 波浪号的平方反比根
D_tilde_invroot np.linalg.inv(sqrtm(D_tilde)) 现在我们已经有了 A 波浪号以及 D 波浪号的平方反比根我们可以计算出 A 帽子 A-hat帽子的程序表示
A_hat D_tilde_invroot A_tilde D_tilde_invroot 请注意numpy 中的 与 matmul 的意思相同。 A-hat 帽子的结果 现在我们将实现消息传递算法。让我们从我们拥有的消息向量 H 开始检查它在图网络中的流动方式。我们知道
H Adj np.array([1,2,3,4,5]).reshape(-1,1) 现在我们让信息流在图网络中
epochs 9
information [H.flatten()]
for i in range(epochs):H A_hat Hinformation.append(H.flatten())
四、图神经网的可视化 让我们看看这个热图中的信息流。注意每个个体x 轴如何随时间y 轴获取或丢失信息。
import matplotlib.pyplot as pltplt.imshow(information, cmapReds, interpolationnearest)
plt.show() 让我们把它画出来
fig, ax plt.subplots(figsize(12, 12))
from time import timefor i in range(0,len(information)):colors information[i]nx.draw(g, pos, with_labelsTrue, labelsnode_labels, node_colorcolors*2, axax, edge_colorgray, node_size1500, font_size30, font_familyserif,vmin np.array(information).min(), vmaxnp.array(information).max())plt.title(Epoch{}.format(i))plt.savefig(/home/user/Downloads/message/foo{}.png.format(time()), bbox_inchestight, transparentTrue)import glob
from PIL import Imagefp_in /home/user/Downloads/message/foo*.png
fp_out /home/user/Downloads/message100_try.gifimg, *imgs [Image.open(f) for f in sorted(glob.glob(fp_in))]
img.save(fpfp_out, formatGIF, append_imagesimgs,save_allTrue, duration1200, loop0) 从视觉上看图网络中的信息流在每个时期都如下所示 在下图中我们可以看到网络的每个节点随时间推移有多少信息。请注意节点 1、3、4 和 5 的收敛 有关消息传递算法在基于代理的模型中的实际应用请参阅我在 COMSES 上使用 Python 和 NetLogo 制作的模型鲁本斯·津布雷斯