探索图神经网络(GNN):使用Python实现你的GNN模型

news2024/11/24 6:56:03

一、引言

图神经网络(Graph Neural Network, GNN)作为近年来机器学习和深度学习领域的热门话题,正逐渐吸引越来越多的研究者和开发者的关注。GNN能够处理图结构数据,在社交网络分析、推荐系统、化学分子结构预测等领域有着广泛的应用。本文将带你一步一步使用Python实现一个基本的图神经网络模型,并帮助你理解相关的核心概念和技术细节。

二、图神经网络的基础知识

图神经网络(GNN)作为一种新兴的深度学习模型,在处理图结构数据方面展现出了巨大的潜力。为了更好地理解GNN的工作原理和应用场景,下面将详细介绍图神经网络的基础知识,包括图的基本概念、GNN的核心思想以及GNN的工作机制。

1. 图的基本概念

在讨论图神经网络之前,首先需要了解图的基本概念。图是一种数学结构,由节点(vertices)和边(edges)组成,用于描述实体及其关系。图可以表示为 𝐺=(𝑉,𝐸)G=(V,E),其中 𝑉V 表示节点集合,𝐸E 表示边集合。

  • 节点(Node):图中的基本单元,代表实体。例如,在社交网络中,节点可以表示用户。
  • 边(Edge):连接节点的线,表示节点之间的关系或连接。例如,在社交网络中,边可以表示用户之间的好友关系。
  • 邻居节点(Neighbor Node):与某个节点直接相连的节点。例如,用户A的邻居节点就是与用户A有直接关系的其他用户。
  • 特征(Feature):节点或边的属性信息。例如,用户节点的特征可以是用户的年龄、性别、兴趣等。

2. GNN的核心思想

图神经网络的核心思想是通过迭代更新节点的表示(embedding),使得每个节点能够聚合来自其邻居节点的信息,从而更好地捕捉图结构信息。这种迭代过程通常包括以下几个步骤:

  • 消息传递(Message Passing):每个节点向其邻居节点发送消息,传递自身的特征信息。
  • 消息聚合(Message Aggregation):每个节点从其邻居节点接收消息,并将这些消息进行聚合。常见的聚合操作包括求和(sum)、平均(mean)和最大(max)等。
  • 节点更新(Node Update):每个节点根据聚合后的邻居节点信息和自身的信息,更新自身的表示。这通常通过一个神经网络层来实现,例如全连接层或图卷积层。

3. GNN的工作机制

为了更具体地理解GNN的工作机制,我们以图卷积网络(Graph Convolutional Network, GCN)为例,介绍GNN的具体操作。

3.1 图卷积网络(GCN)

图卷积网络是GNN的经典模型之一,通过图卷积操作来更新节点的表示。其基本公式如下:

其中:

  • 𝐻(𝑙)H(l) 表示第 𝑙l 层的节点表示矩阵,每行对应一个节点的表示。
  • 𝐴^A^ 表示归一化的图邻接矩阵。
  • 𝑊(𝑙)W(l) 表示第 𝑙l 层的权重矩阵。
  • 𝜎σ 表示非线性激活函数,如ReLU。

通过上述公式,GCN能够将邻居节点的信息聚合到中心节点上,并通过多层图卷积逐层更新节点表示。

3.2 图注意力网络(GAT)

图注意力网络通过引入注意力机制,能够自适应地学习每个邻居节点对中心节点的重要性,从而更灵活地捕捉图结构信息。GAT的基本操作如下:

其中:

  • ℎ𝑖′hi′​ 表示节点 𝑖i 的更新表示。
  • 𝑁(𝑖)N(i) 表示节点 𝑖i 的邻居节点集合。
  • 𝛼𝑖𝑗αij​ 表示节点 𝑖i 和节点 𝑗j 之间的注意力系数,表示邻居节点 𝑗j 对节点 𝑖i 的重要性。
  • 𝑊W 表示可训练的权重矩阵。

注意力系数 𝛼𝑖𝑗αij​ 通常通过一个可训练的注意力机制来计算:

其中 𝑎a 是可训练的注意力向量,∣∣∣∣ 表示向量的拼接操作。

4. GNN的训练和优化

图神经网络的训练过程与传统的神经网络类似,通常包括以下几个步骤:

  • 定义损失函数(Loss Function):常用的损失函数包括交叉熵损失(用于分类任务)和均方误差损失(用于回归任务)。
  • 选择优化器(Optimizer):常用的优化器包括SGD和Adam。
  • 反向传播(Backpropagation):通过计算损失函数对模型参数的梯度,更新模型参数。

在训练过程中,GNN会通过多次迭代,不断优化模型参数,使得模型在训练集上的表现逐渐提升。同时,可以通过验证集评估模型的泛化能力,防止过拟合。

5. 图神经网络的优势

图神经网络在处理图结构数据方面具有独特的优势:

  • 捕捉节点关系:GNN能够有效捕捉节点之间的复杂关系,这是传统神经网络无法实现的。
  • 灵活性强:GNN可以处理不同类型和大小的图结构数据,适应性强。
  • 应用广泛:GNN在社交网络、推荐系统、化学分子预测等领域有着广泛的应用前景。

通过上述介绍,相信你对图神经网络的基础知识有了更深入的理解。在接下来的部分,我们将介绍主要的图神经网络模型,并通过实例展示如何使用Python实现这些模型。

三、主要的图神经网络模型

在前一部分中,我们详细介绍了图神经网络(GNN)的基础知识。接下来,我们将探讨几种主要的图神经网络模型,并理解它们各自的特点和优势。这些模型包括图卷积网络(GCN)、图注意力网络(GAT)、图自编码器(GAE)、图同构网络(GIN)和图生成对抗网络(Graph GAN)。

1. 图卷积网络(GCN)

图卷积网络是最早提出并被广泛应用的GNN模型之一。GCN通过卷积操作将邻居节点的信息聚合到中心节点上,从而学习节点的表示。其核心思想是将传统卷积神经网络(CNN)的卷积操作扩展到图结构数据上。

GCN的基本公式

GCN的基本公式如下:

其中:

  • 𝐻(𝑙)H(l) 表示第 𝑙l 层的节点表示矩阵,每行对应一个节点的表示。
  • 𝐴^A^ 表示归一化的图邻接矩阵。
  • 𝑊(𝑙)W(l) 表示第 𝑙l 层的权重矩阵。
  • 𝜎σ 表示非线性激活函数,如ReLU。

通过上述公式,GCN能够将邻居节点的信息聚合到中心节点上,并通过多层图卷积逐层更新节点表示。

示例代码:

python

import torch
import torch.nn as nn
import torch.nn.functional as F
from dgl.nn.pytorch import GraphConv

class GCN(nn.Module):
    def __init__(self, in_feats, hidden_feats, out_feats):
        super(GCN, self).__init__()
        self.conv1 = GraphConv(in_feats, hidden_feats)
        self.conv2 = GraphConv(hidden_feats, out_feats)

    def forward(self, g, in_feat):
        h = self.conv1(g, in_feat)
        h = F.relu(h)
        h = self.conv2(g, h)
        return h

# 示例代码
# 加载图数据和特征
graph = ...  # 你的图数据
features = ...  # 节点特征
in_feats = features.shape[1]
hidden_feats = 16
out_feats = ...  # 类别数量

# 实例化和前向传播
model = GCN(in_feats, hidden_feats, out_feats)
logits = model(graph, features)

2. 图注意力网络(GAT)

图注意力网络通过引入注意力机制,自适应地学习每个邻居节点对中心节点的重要性,从而更灵活地捕捉图结构信息。GAT能够为每个节点分配不同的权重,使得信息聚合过程更加精细。

GAT的基本公式

GAT的基本公式如下:

其中:

  • ℎ𝑖′hi′​ 表示节点 𝑖i 的更新表示。
  • 𝑁(𝑖)N(i) 表示节点 𝑖i 的邻居节点集合。
  • 𝛼𝑖𝑗αij​ 表示节点 𝑖i 和节点 𝑗j 之间的注意力系数,表示邻居节点 𝑗j 对节点 𝑖i 的重要性。
  • 𝑊W 表示可训练的权重矩阵。

注意力系数 𝛼𝑖𝑗αij​ 通常通过一个可训练的注意力机制来计算:

其中 𝑎a 是可训练的注意力向量,∣∣∣∣ 表示向量的拼接操作。

示例代码:

python

from dgl.nn.pytorch import GATConv

class GAT(nn.Module):
    def __init__(self, in_feats, hidden_feats, out_feats, num_heads):
        super(GAT, self).__init__()
        self.gat1 = GATConv(in_feats, hidden_feats, num_heads)
        self.gat2 = GATConv(hidden_feats * num_heads, out_feats, 1)

    def forward(self, g, in_feat):
        h = self.gat1(g, in_feat)
        h = F.elu(h)
        h = self.gat2(g, h)
        return h

# 示例代码
# 加载图数据和特征
graph = ...  # 你的图数据
features = ...  # 节点特征
in_feats = features.shape[1]
hidden_feats = 16
out_feats = ...  # 类别数量
num_heads = 8

# 实例化和前向传播
model = GAT(in_feats, hidden_feats, out_feats, num_heads)
logits = model(graph, features)

3. 图自编码器(GAE)

图自编码器是一种用于图数据的无监督学习模型。GAE通过编码器和解码器结构,学习节点的低维表示,并重构原始图结构。GAE在节点表示学习和图生成任务中表现出色。

GAE的基本结构

GAE由编码器和解码器两部分组成:

  • 编码器:将原始图数据编码为低维表示。通常使用GCN或其他GNN模型作为编码器。
  • 解码器:从低维表示重构图结构。常见的解码方法包括内积解码和多层感知机(MLP)解码。

编码器的输出表示为 𝑍Z,解码器的输出表示为 𝐴^A^,重构损失函数通常为:

其中 𝐴A 表示原始图的邻接矩阵,𝐴^A^ 表示重构的邻接矩阵。

示例代码:

python

from dgl.nn.pytorch import GraphConv

class GAE(nn.Module):
    def __init__(self, in_feats, hidden_feats):
        super(GAE, self).__init__()
        self.encoder = GraphConv(in_feats, hidden_feats)
        self.decoder = GraphConv(hidden_feats, in_feats)

    def forward(self, g, in_feat):
        h = self.encoder(g, in_feat)
        h = F.relu(h)
        h = self.decoder(g, h)
        return h

# 示例代码
# 加载图数据和特征
graph = ...  # 你的图数据
features = ...  # 节点特征
in_feats = features.shape[1]
hidden_feats = 16

# 实例化和前向传播
model = GAE(in_feats, hidden_feats)
reconstructed_features = model(graph, features)

4. 图同构网络(GIN)

图同构网络旨在提高GNN在图同构测试中的表达能力。GIN通过设计特定的聚合函数,使得其在判别图同构性方面具有更强的理论保证。GIN的模型结构简单,但在许多任务上表现优异。

GIN的基本公式

GIN的基本公式如下:

其中:

  • ℎ𝑖(𝑘)hi(k)​ 表示第 𝑘k 层中节点 𝑖i 的表示。
  • MLP(𝑘)MLP(k) 表示第 𝑘k 层的多层感知机。
  • 𝜖(𝑘)ϵ(k) 是一个可学习或固定的参数,用于调节节点自身的信息和邻居节点信息的比例。

GIN通过设计特定的聚合函数,使得其在判别图同构性方面具有更强的理论保证,确保节点表示的唯一性,从而在图分类任务中表现优越。

python

import torch
import torch.nn as nn
import torch.nn.functional as F
from dgl.nn.pytorch import GraphConv

class GIN(nn.Module):
    def __init__(self, in_feats, hidden_feats, out_feats):
        super(GIN, self).__init__()
        self.conv1 = GraphConv(in_feats, hidden_feats, aggregator_type='sum')
        self.conv2 = GraphConv(hidden_feats, out_feats, aggregator_type='sum')
        self.eps = nn.Parameter(torch.zeros(1))

    def forward(self, g, in_feat):
        h = (1 + self.eps) * in_feat + self.conv1(g, in_feat)
        h = F.relu(h)
        h = (1 + self.eps) * h + self.conv2(g, h)
        return h

# 示例代码
# 加载图数据和特征
graph = ...  # 你的图数据
features = ...  # 节点特征
in_feats = features.shape[1]
hidden_feats = 16
out_feats = ...  # 类别数量

# 实例化和前向传播
model = GIN(in_feats, hidden_feats, out_feats)
logits = model(graph, features)

5. 图生成对抗网络(Graph GAN)

图生成对抗网络将生成对抗网络(GAN)引入到图数据中,用于生成逼真的图结构。Graph GAN包括一个生成器和一个判别器,生成器用于生成新的图结构,判别器用于判别图结构的真实性。

Graph GAN的基本结构

Graph GAN由生成器和判别器两部分组成:

  • 生成器:负责生成新的图结构或节点表示。通常使用随机噪声作为输入,通过一系列变换生成图数据。
  • 判别器:负责判别输入的图结构或节点表示是真实的还是生成的。判别器通常使用一个二分类器来进行判断。

生成器和判别器之间通过对抗训练进行优化,生成器试图生成逼真的图数据以欺骗判别器,而判别器则不断提高其判别能力。

Graph GAN的损失函数

Graph GAN的损失函数包括生成器损失和判别器损失:

  • 生成器损失

其中 𝐺G 表示生成器,𝐷D 表示判别器,𝑧z 表示随机噪声。

  • 判别器损失

其中 𝑥x 表示真实图数据,𝑝𝑑𝑎𝑡𝑎(𝑥)pdata​(x) 表示真实数据的分布。

通过对抗训练,Graph GAN能够生成高质量的图数据,并在图生成和表示学习任务中取得优异的效果。

示例代码:

python

import torch
import torch.nn as nn
import torch.optim as optim

class GraphGANGenerator(nn.Module):
    def __init__(self, in_feats, hidden_feats, out_feats):
        super(GraphGANGenerator, self).__init__()
        self.fc1 = nn.Linear(in_feats, hidden_feats)
        self.fc2 = nn.Linear(hidden_feats, out_feats)

    def forward(self, z):
        h = F.relu(self.fc1(z))
        return torch.sigmoid(self.fc2(h))

class GraphGANDiscriminator(nn.Module):
    def __init__(self, in_feats, hidden_feats, out_feats):
        super(GraphGANDiscriminator, self).__init__()
        self.fc1 = nn.Linear(in_feats, hidden_feats)
        self.fc2 = nn.Linear(hidden_feats, out_feats)

    def forward(self, x):
        h = F.relu(self.fc1(x))
        return torch.sigmoid(self.fc2(h))

# 示例代码
# 加载图数据和特征
z = torch.randn((100, 16))  # 随机噪声
real_data = ...  # 真实图数据

# 实例化模型
gen = GraphGANGenerator(16, 32, 16)
disc = GraphGANDiscriminator(16, 32, 1)

# 生成假数据
fake_data = gen(z)

# 判别真假数据
real_scores = disc(real_data)
fake_scores = disc(fake_data)

以上示例代码展示了如何实现和使用这五种主要的图神经网络模型。每种模型都有其独特的结构和适用场景,可以根据具体需求选择合适的模型。

以上介绍了几种主要的图神经网络模型,包括图卷积网络(GCN)、图注意力网络(GAT)、图自编码器(GAE)、图同构网络(GIN)和图生成对抗网络(Graph GAN)。每种模型都有其独特的结构和优势,适用于不同的图数据处理任务。理解这些模型的原理和应用场景,有助于我们更好地利用图神经网络解决复杂的图数据问题。

四、图神经网络的应用场景

图神经网络(GNN)作为一种强大的深度学习模型,能够处理图结构数据,因而在多个领域展现出了广泛的应用前景。以下将详细介绍GNN在社交网络分析、推荐系统、化学分子结构预测、交通网络优化和知识图谱等方面的应用。

1. 社交网络分析

社交网络是典型的图结构数据,其中用户可以看作是节点,用户之间的关系(如好友关系、关注关系等)可以看作是边。GNN在社交网络分析中的应用包括:

  • 节点分类:通过GNN,可以根据用户的特征和其邻居的特征,预测用户的某些属性,如兴趣爱好、性别、年龄等。这对于精准广告投放、个性化推荐等应用非常重要。

  • 社区发现:GNN可以用于识别社交网络中的社区结构,将具有相似兴趣或关系紧密的用户聚集在一起。这对于社交媒体平台的用户体验优化和信息传播分析具有重要意义。

  • 链接预测:GNN可以用于预测社交网络中可能出现的新关系,例如预测两个用户是否会成为朋友。这对于推荐系统中的好友推荐功能非常有用。        

2. 推荐系统

推荐系统的核心任务是为用户推荐感兴趣的物品。GNN在推荐系统中的应用包括:

  • 用户-物品图:通过构建用户和物品的二部图,利用GNN可以更好地捕捉用户与物品之间的复杂关系,从而提高推荐的准确性和个性化。例如,用户-物品图中的节点可以表示用户和物品,边可以表示用户对物品的评分或购买行为。

  • 图嵌入学习:通过GNN,可以学习用户和物品的低维嵌入表示,这些表示能够捕捉用户和物品之间的隐含关系,从而用于推荐算法中,提高推荐效果。

  • 动态推荐:GNN可以处理动态图数据,通过对时间维度上的信息进行建模,实现对用户兴趣变化的捕捉,从而提供更加个性化和实时的推荐。        

3. 化学分子结构预测

化学分子可以看作是图结构,其中原子是节点,化学键是边。GNN在化学和生物领域有着广泛的应用,包括:

  • 分子属性预测:通过GNN,可以预测化学分子的物理化学性质,如溶解度、稳定性、毒性等。这对于新药研发和材料科学研究具有重要意义。

  • 药物活性预测:GNN可以用于预测某种化合物是否具有特定的生物活性,从而加速药物研发过程。例如,通过学习已知药物分子与目标蛋白的相互作用模式,GNN可以预测新化合物的潜在药物活性。

  • 分子生成:通过生成对抗网络(GAN)与GNN的结合,可以生成具有特定性质的分子结构。这对于设计新药分子和材料具有重要应用前景。        

4. 交通网络优化

交通网络是一个典型的图结构数据,其中道路交叉口和道路段分别表示为节点和边。GNN在交通网络中的应用包括:

  • 交通流量预测:通过GNN,可以预测交通网络中各个路段的流量变化。这对于交通管理部门进行拥堵预测和优化调度具有重要意义。

  • 路径规划:GNN可以用于寻找最优路径,考虑交通状况和道路连接情况,提供更加智能和高效的路径规划方案。

  • 事故检测:通过对交通网络的实时数据进行分析,GNN可以用于检测异常情况,如交通事故、道路封闭等,并及时提供预警和应对方案。        

5. 知识图谱

知识图谱是一种用于表示实体及其关系的图结构数据。GNN在知识图谱中的应用包括:

  • 实体链接:通过GNN,可以将不同数据源中的相同实体进行链接和融合,从而构建更加全面和准确的知识图谱。

  • 关系预测:GNN可以用于预测知识图谱中实体之间的潜在关系。例如,在医学知识图谱中,可以预测疾病与症状、药物与疾病之间的关系,从而辅助医学研究和诊断。

  • 问答系统:基于知识图谱的问答系统通过GNN进行知识推理和答案生成,提高问答的准确性和智能性。        

图神经网络在处理图结构数据方面展现出了独特的优势,广泛应用于社交网络分析、推荐系统、化学分子结构预测、交通网络优化和知识图谱等多个领域。通过深入了解和应用GNN,可以解决许多复杂的数据分析和预测问题,推动各个领域的技术进步和创新。

五、总结

本文介绍了如何使用Python和DGL库实现一个简单的图神经网络模型,并阐述了图神经网络的基础知识、主要模型以及应用场景。通过本文的学习,你应该能够初步了解GNN的基本原理和实现方法,并尝试在实际项目中应用GNN。

图神经网络是一个强大且灵活的工具,它在处理图结构数据方面有着独特的优势。希望这篇文章能帮助你开启GNN的探索之旅。如果你对图神经网络感兴趣,可以进一步深入学习更复杂的模型和应用,如GraphSAGE、GAT等。祝你在GNN的世界里有所收获!

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

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

相关文章

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 任务安排问题(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 https://app5938.acapp.acwing.com.cn/contest/2/problem/OD…

课程管理系统

摘 要 在大学里,课程管理是一件非常重要的工作,教学工作人员每天都要与海量的数据和信息打交道。确保数据的精确度和完整程度,影响着每一位同学的学习、生活和各种活动的正常展开,更合理的信息管理也为高校工作的正规化运行和规范…

ThinkPHP6图书借阅管理系统

有需要请加文章底部Q哦 可远程调试 ThinkPHP6图书借阅管理系统 一 介绍 此图书借阅管理系统基于ThinkPHP6框架开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 ThinkPHP6mysqlbootstrapphpstudyvscode 二 功能 用户 1 登录/注销…

Vitis Accelerated Libraries 学习笔记--Vision 库介绍

目录 1. 简介 2. 分类介绍 2.1 图像容器 2.2 图像处理基础 2.3 图像滤波和平滑 2.4 图像变换和增强 2.5 图像分析和特征检测 2.6 数学和算术操作 2.7 图像校正和优化 2.8 颜色和阈值处理 2.9 高级图像处理 2.10 光流和运动估计 2.11 图像转换和映射 2.12 其他特殊…

【服务器05】之【登录/注册账号成功转至游戏场景】

Unity登录注册数据库 打开【服务器01】的文章项目 导入新UI系统 点击2D 双击输入栏位置 修改输入框尺寸及位置 放大字体 修改默认输入文字 发现中文字变成了口口口口 原因是新UI系统不支持中文,解决这个问题需要更换字体 并且修改输入时字体大小 我们取电脑中找Fon…

【ARMv8/v9 GIC 系列 4.3 -- GIC 中断控制系统寄存器 ICC_SRE_ELn 使用介绍】

文章目录 GIC 中断控制系统寄存器 ICC_SRE_ELn寄存器位域介绍Interrupt BypassBypass IRQBypass FIQBypass 配置GIC 中断控制系统寄存器 ICC_SRE_ELn ICC_SRE_EL3是中断控制器系统寄存器(Interrupt Controller System Register),用于控制在异常级别3(EL3)下,对GIC CPU接口…

Hive基础教程

文章目录 Apache Hive 教程1. Hive-简介1.1 学习Hive的前置知识1.2 什么是Hive?1.3 Hive的架构1.4 Hive的工作流程 Apache Hive 教程 资料来源:Hive Tutorial (tutorialspoint.com) Hive是Hadoop中用于处理结构化数据的数据仓库基础设施工具。它驻留在H…

pywinauto入门指南:轻松掌握Windows GUI自动化

pywinauto库概述: pywinauto是一个Python库,主要用于自动化Windows应用程序的GUI测试和操作.它提供了一组简单而强大的API,可以模拟用户与Windows应用程序的交互,包括点击按钮、输入文本、选择菜单等操作. 安装 ##pywinauto可以通过pip进行安装,打开命令行运行: pip install…

AI落地不容乐观-从神话到现实

开篇 在这儿我不是给大家泼冷水,而是我们一起来看一下从2022年11月左右GPT3.0掀起了一股“AI狂潮”后到现在,AI在商用、工业、军用下到底有没有得到了大规模应用呢? 这个答案每一个参与者其实心里有数那就是:没有。 但是呢它的…

STM32学习和实践笔记(36):DAC数模转换实验

1.STM32F1 DAC简介 DAC(Digital to analog converter)即数字模拟转换器,它可以将数字信号转换为模拟信号。它的功能与ADC相反。在常见的数字信号系统中,大部分传感器信号被转化成电压信号,而 ADC 把电压模拟信号转换成…

算法设计与分析:分治法求最近点对问题

一、实验目的 1. 掌握分治法思想; 2. 学会最近点对问题求解方法。 二、实验内容 1. 对于平面上给定的N个点,给出所有点对的最短距离,即,输入是平面上的N个点,输出是N点中具有最短距离的两点。 2. 要求随机生成N个…

项目训练营第三天

项目训练营第三天 注册登录测试 前面我们编写了用户注册、登录的逻辑代码,每编写完一个功能模块之后,我们都要对该模块进行单元测试,来确保该功能模块的正确性。一般情况下使用快捷键Ctrl Shift Insert,鼠标左击类名可以自动生…

灵活的招聘管理系统有五种方法帮助成功招聘

还记得以前的时代吗?这取决于你的年龄,直到智能手机、流媒体电视和电子邮件出现。今天,任何活着的成年人都经历了技术上的巨大变化,这创造了一种新的行为方式。人才获取也是如此。 一个值得推荐的招聘管理系统 招聘团队被困在满足…

机器人系统工具箱的 Gazebo 模拟

Gazebo 联合仿真模块 机器人系统工具箱> Gazebo联合仿真模块库包含与仿真环境相关的 Simulink 模块。要查看该库,在 MATLAB 命令提示符下输入robotgazebolib。

AIGC-CVPR2024best paper-Rich Human Feedback for Text-to-Image Generation-论文精读

Rich Human Feedback for Text-to-Image Generation斩获CVPR2024最佳论文!受大模型中的RLHF技术启发,团队用人类反馈来改进Stable Diffusion等文生图模型。这项研究来自UCSD、谷歌等。 在本文中,作者通过标记不可信或与文本不对齐的图像区域&…

机器学习(V)--无监督学习(六)流形学习

title: 机器学习(V)–无监督学习(二)流形学习 date: katex: true categories: Artificial IntelligenceMachine Learning tags:机器学习 cover: /img/ML-unsupervised-learning.png top_img: /img/artificial-intelligence.jpg abbrlink: 26cd5aa6 description: 流形学习 【降…

String(C++)

文章目录 前言文档介绍经典题目讲解HJ1 字符串最后一个单词的长度 模拟实现框架构造函数析构函数迭代器c_str()赋值size()capacity()reserveempty()[ ]访问front/backpush_backappendoperatorinsert一个字符insert一个字符串eraseswapfind一个字符find一个字符串substr()clear(…

集群开发学习(三)修改用户模块(git 使用,局域网设代理)

git 使用 参考:https://blog.csdn.net/weixin_60033897/article/details/136016074 在服务器端创建公钥私钥 git config --global user.email "1686660735qq.com" git config --global user.name qinliangql git config --global -l # 查看信息# 这样可…

基于组件的架构:现代软件开发的基石

目录 前言1. 基于组件的架构概述1.1 什么是组件?1.2 组件的分类 2. 基于组件的架构的优势2.1 提高代码的可重用性2.2 增强系统的灵活性2.3 简化维护和升级2.4 促进团队协作 3. 实现基于组件的架构3.1 识别和定义组件3.2 设计组件接口3.3 组件的开发和测试3.4 组件的…

摊牌了,我不装了~各种Amazon Bedrock小样儿、试用装,今天免费!

探索世界顶级的大模型、智能体、文生图、对话机器人……新手?还是专家?加入我们,解锁精彩内容: l 初体验:在 Amazon Bedrock Playground 直接调用强大的大模型,点亮生成式AI技能树。 l 文生图&#xff1a…