当前位置: 首页 > news >正文

沈阳的网站建设网站商城建设员招聘

沈阳的网站建设,网站商城建设员招聘,关键词在线听免费,新项目开发流程一、说明 G拉夫神经网络#xff08;GNN#xff09;#xff01;想象他们是人工智能世界的媒人#xff0c;通过探索他们的联系#xff0c;不知疲倦地帮助数据点找到朋友和人气。数字派对上的终极僚机。 现在#xff0c;为什么这些GNN如此重要#xff0c;你问#xff1f;好… 一、说明         G拉夫神经网络GNN想象他们是人工智能世界的媒人通过探索他们的联系不知疲倦地帮助数据点找到朋友和人气。数字派对上的终极僚机。         现在为什么这些GNN如此重要你问好吧在现实生活中一切似乎都是相互关联的。我们谈论的是社交网络、万维网、粒子网络甚至是分子⚛的同构舞蹈问沃尔特怀特。这是一个令人难以置信的启示即使是文本、图像和表格格式等“直截了当”的数据结构也可以被赋予一个疯狂的扭曲以表示为图形 这就像把你无聊的贪睡数据派对变成尤里卡时刻相信我可能性是无穷无尽的。         但是等等是什么让这些新人从人工智能人群中脱颖而出嗯他们就像卷积和顺序机器学习ML模型的酷表亲。他们的架构灵感来自这个词所以他们把自己扭曲成一个漏斗蛋糕如果漏斗蛋糕是数据结构只是为了解码错综复杂的关系并解决连夏洛克都羡慕的问题。flexible 二、内容         在本文中我们将讨论图形数据结构和基于图形的 ML 架构的基础知识。详细的解释超出了这项工作的范围我尽可能提供了有用的链接。此外我们将使用PyTorch GeometricPyG我们的超人斗篷构建一些模型并遵循以下路线图 图数据集的低谷并介绍类行星数据集。此外我们将在此处定义我们的 ML 问题陈述。凭空打开GNN架构和一些聪明的公式。不我们不是逃课因此需要介绍带有定制 Python 类的 PyTorch 模型。接下来我们训练模型并测试我们的创作。我们的GNN将与数据集战斗的终极对决。总结一下事情和关键要点。 系好安全带这将是一次图形品尝之旅 一个好吧让我们谈谈图形数据集——一个数字游乐场数据点在这里闲逛分享故事有时甚至是八卦。把它们想象成你在聚会上发现的那些相互关联的社交圈但你不是人而是节点信息通过边缘在他们之间共享。现在节点和边缘不仅仅是站着向上展示它们的虚拟拇指 。他们是节目的主角⭐每个人都有自己的一套功能和属性。         但是等等我们不会从头开始编织整个事情。不我们没有那么雄心勃勃。让我们欢迎来自 PyTorch Geometric 的 Planetoid 软件包来拯救我们并减少样板文件。它就像构建梦想图而不费吹灰之力的蓝图。乐高积木供研究人员控制图形的大小、连接和执行数据拆分。         CORA来自论文“用图嵌入重访半监督学习”的经典基准引文网络数据集。在这个数据集中每篇研究论文都是一个节点边缘呢啊它们就像一条看不见的线通过引文连接论文         现在这些纸上的客人中的每一个都带着礼物来了——具体来说就是一袋代表其内容的文字。这是一场词汇盛宴每个节点特征向量从总共 1 个选项中揭示特定单词的存在 0 或不存在 1433。让我告诉你这些报纸是尖峰食客;他们只关心某些词。         在科学领域Cora 是评估节点分类和链路预测等任务中的 GNN 和其他方法的首选。请记住在这个派对中引文是最终的破冰船➡️edges 科拉数据集的输出 科拉的喜悦 x[2708, 1433]是节点特征矩阵。想象一下有 2708 个文档每个文档都用一个 1433 维的特征向量表示全部是 one-hot 编码的。edge_index[2, 10556]表示图形连通性。这告诉谁和谁一起出去玩形状为2定向边缘的数量。y[2708]是真实标签。每个节点都被分配到一个类没有尴尬的时刻——“那么你研究什么train_mask[2708]、 是可选属性可帮助将数据集分别拆分为训练集、验证集和测试集。其中存在的布尔值断言正确的节点在正确的位置混合。val_mask[2708]test_mask[2708] 让我们停下来思考一下。使用1433个单词的特征向量人们可以轻松地在MLP模型上进行一些好的老式节点/文档分类。但是嘿我们不是满足于普通的人.我们将越过边缘一头扎进这些关系以增强我们的预测。因此让我们在这里认真地相互联系edge_index # Let us talk more about edge index/graph connectivity print(fShape of graph connectivity: {cora[0].edge_index.shape}) print(cora[0].edge_index)         Cora 数据集的边缘索引         这很有趣因为它包含两个列表第一个列表低声说源节点 ID而第二个列表将 bean 溢出到它们的目的地。此设置有一个奇特的名字坐标列表 COO。这是一种高效存储稀疏矩阵的漂亮方法例如当您的节点与房间中的每个人都不完全聊天时。edge_index         现在我知道你在想什么。为什么不使用简单的邻接矩阵好吧在图数据领域并非每个节点都是社交蝴蝶。那些邻接矩阵他们将在零的海洋中游泳这不是最节省内存的设置。这就是为什么首席运营官是我们的首选方法而 PyG 确保边缘本质上是定向的。 # The adjacency matrix can be inferred from the edge_index with a utility function.adj_matrix torch_geometric.utils.to_dense_adj(cora[0].edge_index)[0].numpy().astype(int) print(fShape: {adj_matrix.shape}\nAdjacency matrix: \n{adj_matrix}) # Some more PyG utility functions print(fDirected: {cora[0].is_directed()}) print(fIsolated Nodes: {cora[0].has_isolated_nodes()}) print(fHas Self Loops: {cora[0].has_self_loops()}) 该对象具有许多壮观的实用程序函数让我们通过三个示例先睹为快Data is_directed告诉图是否是有向的即邻接矩阵不是对称的。has_isolated_edges嗅出那些孤独的节点与熙熙攘攘的人群脱节。这些脱节的灵魂就像没有完整画面的拼图使下游的ML任务成为真正的挠头问题。has_self_loops通知节点是否与自身❣处于关系中 让我们简要谈谈可视化。将 PyG 对象转换为 图形对象并绘制它们就像小菜一碟。但是抓住你的马我们的客人列表节点数量超过 2k 长因此尝试可视化它就像将足球场挤进您的客厅一样。是的你不想要那个⛔.所以虽然我们不参与情节派对但只要知道这张图已经准备好并准备好进行一些严肃的网络行动即使这一切都发生在幕后。 ️ ♀️DataNetworkX C伊特西尔是来自普拉特诺伊德家族的科拉的学术兄弟姐妹。它站在舞台上有3327篇科学论文每个节点正好具有6个精英类别类标签中的一个。现在让我们谈谈数据统计其中 CiteSeer 宇宙中的每个论文/节点都由一个具有 3703/0 值的 1 维词向量定义。渴望了解更多详情你可以更深入地挖掘兔子洞 citeseer load_planetoid(namespan stylecolor:#c41a16CiteSeer 引用Seer引文网络统计 print(fDirected: {citeseer[0].is_directed()}) print(fIsolated Nodes: {citeseer[0].has_isolated_nodes()}) print(fHas Self Loops: {citeseer[0].has_self_loops()}) 随着引文网络数据二人组已经登上舞台我们在学术传奇中略有转折。CiteSeer 数据集并不全是阳光;它有孤立的节点记住我们的孤独者❓。现在对于游戏中的这些家伙来说分类任务将有点困难。 这里有一个问题这些孤立的节点对GNN的聚合我们稍后会讨论它魔术构成了挑战。我们仅限于对这些孤立的节点使用特征向量表示多层感知器MLP模型就是这样做的。 缺少邻接矩阵信息可能会降低准确性。虽然我们无法做太多事情来解决这个问题但我们将尽最大努力阐明它们的影响 无连接 . # Node degree distributionnode_degrees torch_geometric.utils.degree(citeseer.edge_index[0]).numpy() node_degrees Counter(node_degrees) # convertt to a dictionary object# Bar plot fig, ax plt.subplots(figsize(18, 6)) ax.set_xlabel(Node degree) ax.set_ylabel(Number of nodes) ax.set_title(CiteSeer - Node Degree Distribution) plt.bar(node_degrees.keys(),node_degrees.values(),color#0A047A) CiteSeer 具有大多数节点具有 1 或 2 个邻居。现在你可能会想“有什么大不了的好吧让我告诉你这就像只和几个朋友一起举办派对——很舒适但没有狂欢。关于他们与社区联系的全球信息将缺乏。与Cora相比这可能是GNN的另一个挑战。 三、问题定义 我们的使命现在非常明确有了每个节点的节点特征表示及其与相邻节点的连接我们正在寻求预测给定图形中每个节点的正确类标签。 注意我们不仅依赖于表层节点特征矩阵而且深入研究数据结构分析每个交互并破译每个耳语。它更多的是关于理解数据集而不是基于模式进行简单的原始预测。 四、解开图神经网络 我们即将揭开GNN背后的魔力。它们将节点、边或图形表示为数值向量以便每个节点与其传出边共振。但是GNN背后的秘密武器是什么抢走聚光灯的技术“消息传递、聚合和更新”操作经常应用。一个类比可以举办一个邻里街区派对每个节点与邻居聚合信息转换和更新自己然后与其他人群分享其更新的见解。这是关于迭代更新它们的特征向量为它们注入来自n-hop邻居的本地化智慧。 看看这个宝石GNN介绍它清楚地解释了每个概念。 GNN 由层组成每层扩展其跃点以访问来自邻居的信息。例如一个节点有 2 层的 GNN 将考虑距离来收集见解并更新其表示。请记住知识世界只需点击一下即可只要您准备好互联网就准备好成为您的向导。这项工作的范围不是在这里的一个博客中解释它们而是让我们亲自动手编码⌨ 。friend-of-firend 五、基本GNN         我们正在创建一个基类为我们的实际GNN模型奠定基础。它是训练、评估和统计方法的工具箱。这里没有代码重复         我们还设置了私有方法来初始化与动画相关的统计信息。基类稍后将由 GCN 和 GAT 模型继承以轻松利用共享功能。轻松的效率触手可及️️。 # Base GNN Moduleclass BaseGNN(torch.nn.Module):Base class for Graph Neural Network models.def __init__(self,):super().__init__()torch.manual_seed(48)# Initialize lists to store animation-related statisticsself._init_animate_stats()self.optimizer Nonedef _init_animate_stats(self) - None:Initialize animation-related statistics.self.embeddings []self.losses []self.train_accuracies []self.val_accuracies []self.predictions []def _update_animate_stats(self,embedding: torch.Tensor,loss: torch.Tensor,train_accuracy: float,val_accuracy: float,prediction: torch.Tensor,) - None:# Update animation-related statistics with new dataself.embeddings.append(embedding)self.losses.append(loss)self.train_accuracies.append(train_accuracy)self.val_accuracies.append(val_accuracy)self.predictions.append(prediction)def accuracy(self, pred_y: torch.Tensor, y: torch.Tensor) - float:Calculate accuracy between predicted and true labels.:param pred (torch.Tensor): Predicted labels.:param y (torch.Tensor): True labels.:returns: Accuracy value.return ((pred_y y).sum() / len(y)).item()def fit(self, data: Data, epochs: int) - None:Train the GNN model on the provided data.:param data: The dataset to use for training.:param epochs: Number of training epochs.# Use CrossEntropyLoss as the criterion for trainingcriterion torch.nn.CrossEntropyLoss()optimizer self.optimizerself.train()for epoch in range(epochs 1):# Trainingoptimizer.zero_grad()_, out self(data.x, data.edge_index)loss criterion(out[data.train_mask], data.y[data.train_mask])acc self.accuracy(out[data.train_mask].argmax(dim1), data.y[data.train_mask])loss.backward()optimizer.step()# Validationval_loss criterion(out[data.val_mask], data.y[data.val_mask])val_acc self.accuracy(out[data.val_mask].argmax(dim1), data.y[data.val_mask])kwargs {embedding: out.detach().cpu().numpy(),loss: loss.detach().cpu().numpy(),train_accuracy: acc,val_accuracy: val_acc,prediction: out.argmax(dim1).detach().cpu().numpy(),}# Update animation-related statisticsself._update_animate_stats(**kwargs)# Print metrics every 10 epochsif epoch % 25 0:print(fEpoch {epoch:3} | Train Loss: {loss:.3f} | Train Acc: f{acc * 100:6.2f}% | Val Loss: {val_loss:.2f} | fVal Acc: {val_acc * 100:.2f}%)torch.no_grad()def test(self, data: Data) - float:Evaluate the model on the test set and return the accuracy score.:param data: The dataset to use for testing.:return: Test accuracy.# Set the model to evaluation modeself.eval()_, out self(data.x, data.edge_index)acc self.accuracy(out.argmax(dim1)[data.test_mask], data.y[data.test_mask])return acc 六、多层感知器网络         香草多层感知器网络来了从理论上讲我们可以通过查看文档/节点的特征来预测其类别。不需要关系信息 - 只需要旧的词袋表示。为了验证该假设我们定义了一个简单的 2 层 MLP它仅适用于输入节点特征。 七、图卷积网络         卷积神经网络 CNN 凭借其巧妙的参数共享技巧和有效提取潜在特征的能力在 ML 领域掀起了一场风暴。但图像不也是图表吗困惑让我们将每个像素视为一个节点将 RGB 值视为节点特征。那么一个问题就出现了这些CNN的技巧能否在不规则图形领域实现 这并不像复制粘贴那么简单。图形有自己的怪癖 * **缺乏一致性**灵活性很好但它带来了一些混乱。想想具有相同公式但结构不同的分子。图表可能会像这样棘手。 * **节点顺序之谜**图形没有固定的顺序不像文本或图像。节点就像聚会上的客人——没有固定的位置。算法需要对这种缺乏节点层次结构的态度保持冷静。 * **扩展问题**图形可能会变大。想象一下拥有数十亿用户和数万亿条边缘的社交网络。以这种规模运营不是在公园里散步。拆分和组合图形是一个难题传统的沐浴操作不能直接转移。 我们通过扩展 BaseGNN 类面向对象编程中的常见做法以确保继承来组合一个 GCN。构造函数设置输入、隐藏和输出维度以调整我们网络的步骤。我们正在对参数更新的优化器进行亚当化。正向方法采用节点特征和图连通性 edge_index执行图卷积这些卷积是节点的舞蹈例程灵感来自它们的邻居。ReLU激活给了它一个刺激导致最后一幕log_softmax类概率的函数。 class GCN(BaseGNN):Graph Convolutional Network model for node classification.def __init__(self, input_dim: int, hidden_dim: int, output_dim: int):super().__init__()self.gcn1 GCNConv(input_dim, hidden_dim)self.gcn2 GCNConv(hidden_dim, output_dim)self.optimizer torch.optim.Adam(self.parameters(), lr0.01, weight_decay5e-4)def forward(self, x: torch.Tensor, edge_index: torch.Tensor) - torch.Tensor:Forward pass of the Graph Convolutional Network model.:param (torch.Tensor): Input feature tensor.:param (torch.Tensor): Graph connectivity information:returns torch.Tensor: Output tensor.h F.dropout(x, p0.5, trainingself.training)h self.gcn1(h, edge_index).relu()h F.dropout(h, p0.5, trainingself.training)h self.gcn2(h, edge_index)return h, F.log_softmax(h, dim1) class GAT(BaseGNN):def __init__(self, input_dim: int, hidden_dim: int, output_dim: int,heads: int8):super().__init__()torch.manual_seed(48)self.gcn1 GATConv(input_dim, hidden_dim, headsheads)self.gcn2 GATConv(hidden_dim * heads, output_dim, heads1)self.optimizer torch.optim.Adam(self.parameters(), lr0.01, weight_decay5e-4)def forward(self, x: torch.Tensor, edge_index: torch.Tensor) - torch.Tensor:Forward pass of the Graph Convolutional Network model.:param (torch.Tensor): Input feature tensor.:param (torch.Tensor): Graph connectivity information:returns torch.Tensor: Output tensor.h F.dropout(x, p0.6, trainingself.training)h self.gcn1(h, edge_index).relu()h F.dropout(h, p0.6, trainingself.training)h self.gcn2(h, edge_index).relu()return h, F.log_softmax(h, dim1)八、模型训练 让我们看看图中节点的潜在表示如何随着时间的推移而演变因为模型正在接受节点分类任务的训练。 num_epochs 200 def train_and_test_model(model, data: Data, num_epochs: int) - tuple:Train and test a given model on the provided data.:param model: The PyTorch model to train and test.:param data: The dataset to use for training and testing.:param num_epochs: Number of training epochs.:return: A tuple containing the trained model and the test accuracy.model.fit(data, num_epochs)test_acc model.test(data)return model, test_accmlp MLP(input_dimcora.num_features,hidden_dim16,out_dimcora.num_classes, ) print(f{mlp}\n, f-*88) mlp, test_acc_mlp train_and_test_model(mlp, data, num_epochs) print(f-*88) print(f\nTest accuracy: {test_acc_mlp * 100:.2f}%\n) MLP 训练循环和性能 MLP 训练期间的三维节点表示 正如人们所看到的我们的MLP似乎在聚光灯下挣扎只有大约55%的测试准确率。但是为什么MLP的表现没有更好呢罪魁祸首就是过度拟合——模型对训练数据变得过于舒适在面对新的节点表示时毫无头绪。这就像闭着一只眼睛预测标签一样。它也没有将重要的偏差纳入模型。这正是GNN发挥作用的地方可以帮助提高我们模型的性能。 gcn GCN(input_dimcora.num_features,hidden_dim16,output_dimcora.num_classes, ) print(f{gcn}\n, f-*88) gcn, test_acc_gcn train_and_test_model(gcn, data, num_epochs) print(f-*88) print(f\nTest accuracy: {test_acc_gcn * 100:.2f}%\n) GCN 训练循环和性能 GCN 训练期间的 3 维节点表示 这就是它 - 只需更换那些线性层GCN层我们就可以飙升到令人眼花缭乱的79%的测试精度 ✨ 证明了节点之间关系信息的力量。这就像我们打开了数据聚光灯揭示了以前在阴影中丢失的隐藏模式和联系。数字不会说谎——GNN 不仅仅是算法;他们是数据窃窃私语者。 同样即使是 GAT 由于其多头注意力功能其准确性也更高 81%。 gat GAT(input_dimcora.num_features,hidden_dim8,output_dimcora.num_classes,heads6, ) print(f{gat}\n, f-*88) gat, test_acc_gat train_and_test_model(gat, data, num_epochs) print(f-*88) print(f\nTest accuracy: {test_acc_gat * 100:.2f}%\n) GAT 训练循环和性能 GAT 训练期间的三维节点表示 CiteSeer 数据集上的模型性能 L让我们看看使用TSNE降维技术来查看我们的CiteSeer数据集的潜在表示。我们使用“matplotlib”和“seaborn”来绘制图形的节点。 import matplotlib.pyplot as plt from sklearn.manifold import TSNE import seaborn as sns# Get embeddings embeddings, _ gat(citeseer[0].x, citeseer[0].edge_index)# Train TSNE tsne TSNE(n_components2, learning_rateauto,initpca).fit_transform(embeddings.detach())# Set the Seaborn theme sns.set_theme(stylewhitegrid)# Plot TSNE plt.figure(figsize(10, 10)) plt.axis(off) sns.scatterplot(xtsne[:, 0], ytsne[:, 1], huedata.y, paletteviridis, s50) plt.legend([], [], frameonFalse) plt.show() 来自训练的 GAT 模型的引用Seer 潜在表示 数据画布描绘了一幅发人深省的画面同一类的节点相互吸引形成六个类标签中每个标签的集群。然而异常值孤立节点在这场戏剧中发挥了作用因为它们给我们的准确性分数带来了扭曲。 还记得我们最初对毫秒边缘影响的猜测吗好吧这个假设有发言权。我们正在进行另一项测试我的目标是通过计算按节点度分类的精度来计算 GAT 模型的性能从而揭示连接的重要性。 在 CiteSeer 上按节点度分类的 GAT 性能 九、总结 有了这个我们进入最后一部分我想总结一下关键要点 我们已经看到了为什么GNN胜过MLP并强调了节点关系的关键作用。由于自我注意的动态权重GAT的性能通常优于GCN从而产生更好的嵌入。小心层叠;过多的层会导致过度平滑嵌入会收敛并失去多样性。 我们几乎没有触及表面。我们遇到的算法——图卷积网络GCN或图注意力网络GAT——只是一个开始。图中的边、节点嵌入和数据交响乐有待进一步探索。具体来说可伸缩性至关重要我喜欢在即将发表的文章中深入研究迷你批处理的主题。洛克什·夏尔马
http://www.hkea.cn/news/14443801/

相关文章:

  • o2o平台有哪些网站wordpress音乐分享
  • 深圳建设银行分行网站商丘网吧什么时候恢复营业
  • 哔哩网站开发需求分析模板wordpress 开发者
  • 响应式 网站 开发wordpress 用户密码加密
  • 江苏省建设局网站大连建网站电话
  • 电影网站标题怎么做流量多济南资海网站建设公司
  • 网站备案登录o2o平台网站建设
  • 网站被收录要怎么做网页设计与网站建设全攻略pdf
  • 交换友情链接的网站标准是什么江苏设计网站电话
  • 山西cms建站系统价格如何申请域名建网站
  • 网站建设 配资信贷员在哪个网站做推广
  • 电子商务网站建设中的重要性wordpress 美拍插件
  • 多语言 网站源码小型网站开发
  • 专门做布料的网站百度竞价查询
  • 公司网站应该包括哪些内容网站会员注册系统下载
  • wordpress获取地址栏参数谷歌广告优化
  • 网站的详细设计建设银行投诉网站
  • 网站建设销售需要哪些重庆整合营销网站建设
  • 达孜网站建设在线制图生成器
  • 某网络公司网站源码 蓝色建站企业网站源码北京网站优化经理
  • 网站域名注册服务商图片下载+wordpress
  • 张家港建设银行网站电子工程网络信息技术专业
  • 国际网站开发客户企业常见问题及解决方案
  • 如何找百度做网站个人简历 网站开发
  • 松江企业网站建设网站开发软件有哪
  • 自己可以做门户网站吗做做网站下载免费
  • 桐城做淘宝店铺网站公司搜搜网站提交
  • 怎么增加网站访问量不同网站相似的页面百度不收录吗
  • seo优化网站网页教学WordPress修改前端
  • 精品资源共享课网站建设长春网络哪个好