基于Tucker分解的时序知识图谱补全10.23

基于Tucker分解的时序知识图谱补全

  • 摘要
  • 引言
  • 相关工作
    • 静态知识图谱补全
    • 时序知识图谱补全
  • 背景
  • 提出的模型
    • 学习
    • 时间复杂度和参数增长
    • 表达能力分析
  • 实验

在这里插入图片描述

摘要

知识图谱已被证明是众多智能应用的有效工具。然而,大量有价值的知识仍然隐含在知识图谱中。为了丰富现有的知识图谱,近年来许多用于链接预测和知识图谱嵌入的算法被设计出来推断新的事实。但是,这些研究大多集中在静态知识图谱上,忽略了反映知识有效性的时间信息。开发适用于时间知识图谱补全的模型是一项日益重要的任务。

本文基于四阶张量的Tucker分解 启发,构建了一个新的用于时间知识图谱补全的张量分解模型。证明了所提出的模型具有完全表达能力,并在几个公共基准测试中报告了最先进的结果。此外,提出了几种正则化方案来改进策略,并研究它们对所提出模型的影响。对三个时间数据集(即ICEWS2014,ICEWS2005-15,GDELT)进行的实验研究验证了设计,并证明该模型在链接预测任务上明显优于基准模型。

四阶张量的Tucker分解是一种将一个四阶张量表示为核心张量与三个模式矩阵相乘的分解方法。假设有一个四阶张量X,其维度为(I, J, K, L)。Tucker分解将该张量表示为以下形式:
X ( i , j , k , l ) = ∑ r = 1 R ∑ s = 1 S ∑ t = 1 T ∑ u = 1 U G ( r , s , t , u ) × A ( i , r ) × B ( j , s ) × C ( k , t ) × D ( l , u ) X(i, j, k, l) = \sum_{r=1}^{R} \sum_{s=1}^{S} \sum_{t=1}^{T} \sum_{u=1}^{U} G(r, s, t, u) \times A(i, r) \times B(j, s) \times C(k, t) \times D(l, u) X(i,j,k,l)=r=1Rs=1St=1Tu=1UG(r,s,t,u)×A(i,r)×B(j,s)×C(k,t)×D(l,u)
其中,G是核心张量,具有维度(R, S, T, U),A、B、C、D是模式矩阵,分别具有维度(I, R)、(J, S)、(K, T)、(L, U)。模式矩阵中的每个元素表示张量的某个模式(维度)与对应模式的隐含特征之间的关系。

张量分解模型是一种用于对张量数据进行分解和表示的模型。它将一个高维张量分解为多个低维张量的乘积形式,从而提取出张量中的潜在结构和特征。

引言

知识图谱(KGs)是现实世界中知识和事实的图结构表示,以三元组(主体、谓词、客体)的形式表示。KGs已被证明可用于各种下游任务,如推荐系统、问答系统和信息检索。然而,KGs中仍然存在大量隐藏的知识,即KGs中的实体之间缺少许多连接。近年来,提出了许多用于丰富KGs的KGs补全算法。作为一种代表性方法,KGs嵌入是当前研究的热点,并在KGs补全上展现了其效率和有效性。这种方法的目标是在保留图结构和知识的前提下,对KGs中的节点和关系进行建模,并学习它们的低维隐藏表示,然后将每个三元组的表示输入到评分函数中进行验证。

值得注意的是,KGs中存在两种类型的知识,一种是静态知识,另一种是时序知识。静态知识的有效性随时间不变,例如(武汉,属于城市,中国)。而时序知识可能不是普遍真实的。换句话说,时序知识只在特定的时间段或某个时间点上才是真实的。例如,(巴拉克·奥巴马,担任总统,美国)只在2008年至2016年之间为真实的,(爱因斯坦,获得奖项,诺贝尔奖)只在1922年获得。然而,大多数现有研究都集中在静态KGs上,假设KGs中的每个三元组都是普遍真实的,并忽略了反映知识有效性的时间范围。

在这项工作中,本文研究了在时序KGs上的链接预测任务,这也被称为标准的补全任务。时序KGs中的事实以(主体,谓词,客体,时间戳)的形式呈现,任务是回答查询(主体,谓词,?,时间戳)和(?,谓词,客体,时间戳)。

最近,张量分解方法已成功应用于静态知识图谱的补全。有的将Canonical Polyadic(CP)分解 和Tucker分解应用于知识图谱的补全,并将其构建为三阶张量补全问题。受到四阶张量的CP分解的启发,TNTComplex将时间知识图谱的补全问题表达为四阶张量补全问题,并提出了ComplEx在时间知识图谱补全中的扩展。实质上,CP分解是Tucker分解的一种特殊情况,而具有核张量的Tucker分解比CP分解具有更强的表达能力。此外,对于CP分解来说,计算张量的秩是一个非常困难的问题,因此TNTComplex必须花费大量精力手动选择适当的张量秩来进行时间知识图谱的补全。

Canonical Polyadic(CP),也被称为CANDECOMP/PARAFAC分解,是一种常用的张量分解模型。它用于将高阶张量分解为多个低秩矩阵的乘积形式。
CP分解的目标是将一个高阶张量X表示为一组低秩矩阵的叠加。对于一个三阶张量X,CP分解可以表示为以下形式:
X ≈ ∑_{r=1}^{R} A_{®} ⊗ B_{®} ⊗ C_{®}
其中,A_{®}、B_{®}、C_{®}是分解得到的低秩矩阵,⊗表示张量积运算。分解的结果是通过优化算法来确定每个低秩矩阵的值,使得分解的乘积逼近原始张量X。

在这项工作中,基于四阶张量的Tucker分解构建了一个TuckERT分解模型,用于时间知识图谱的补全。本质上,该工作旨在建立时间信息时间戳与三元组(主体,谓词,客体)之间的关系。具体而言,如果事实(主体,谓词,客体)成立,则支撑事实有效性的时间信息隐藏在实体或谓词中。因此,可以从三元组的实体或谓词中提取时间信息。相反,给定4元组事实,通过将时间信息与实体或谓词相关联,原本由4元组表示的时间事实现在由三元组隐式表示。然后,可以进行张量补全来实现时间知识图谱的补全任务。

与TNTComplex和Desimple 类似,在分解模型中采用了时态和非时态知识,以处理知识的多样性。
贡献如下:

  • 基于四阶张量的Tucker分解,开发了一种新的用于时间知识图谱补全的张量分解模型。
  • 提出了几种正则化方案来改进模型,并研究这些正则化对提出的模型的影响。
  • 对三个时间数据集进行实验研究,证明算法达到了最先进的性能水平。

相关工作

本节介绍了之前提出的静态和时间知识图谱补全方法,其中大多数方法都基于张量分解。

静态知识图谱补全

静态知识图谱补全方法可以广泛分为三种范式:

  1. 基于平移距离的模型,如TransE 和TransD ;
  2. 基于张量分解的方法;
  3. 基于神经网络的模型,包括ConvE和R-GCN。

特别是,由于其高效性和强大功能,张量分解在知识图谱补全中备受青睐。RESCAL是静态知识图谱补全的开创性张量分解方法,它在两个实体向量和谓词矩阵上施加了一个双线性积的得分函数。虽然该模型具有完全的表达能力,但由于谓词矩阵包含大量参数,往往容易出现过拟合问题。后来,DisMult意识到了上述缺陷,并通过对谓词矩阵进行对角化简化了RESCAL。然而,这也带来了一个问题,即对角谓词矩阵只能模拟对称关系而无法模拟非对称关系。为了解决这个问题,ComplEx将实体和谓词嵌入投影到复数空间中,以更好地建模非对称关系。从另一个角度来看,HoLE将循环相关操作应用于主体和客体实体向量,以获得一个组合向量,然后将其与谓词向量匹配以评分事实,从而使模型吸收了RESCAL和DisMult的优点。上述基于CP张量分解的方法独立地学习主体和客体实体的表示,这也是导致链接预测效果不佳的主要原因。鉴于此,SimplE提出了一种利用谓词的逆来解决这个障碍的新的CP方法。除了基于CP分解的方法外,基于Tucker分解的TuckER将知识图谱补全构建为一个三阶二值张量补全问题,并将已知事实的二值张量分解为核张量和三个正交矩阵。

时序知识图谱补全

大多数静态补全模型在学习知识图谱元素的嵌入时未考虑时间维度。时序知识图谱补全仍然是一个有价值但很少研究的问题,在近年来只有少数几个时间知识图谱补全模型被提出。
t-TransE: 为了模拟相邻事实的时间感知谓词之间的转换,t-TransE对嵌入空间的几何结构施加了时间顺序约束,以使嵌入在时间上保持一致且更准确。然后,t-TransE优化由时间顺序约束和TransE模型组成的联合模型,使嵌入空间与观察到的事实维度相兼容。
HyTE: 受到TransH的启发,HyTE通过将实体和谓词投影到由时间信息建模的超平面上,将时间信息与实体和谓词关联起来。然后,HyTE通过最小化平移距离来完成实体和谓词的嵌入学习,其中包含了时间信息。
TA-DistMult: 为了融入时间信息,TA-DistMult利用循环神经网络学习谓词的时间感知表示,然后在DistMult和TransE中利用该表示。
ConT: 为了模拟认知功能,该工作将几种静态知识图谱方法(包括Tucker和RESCAL)推广到时间/情节知识图谱。Tree和ConT是对RESCAL的情节张量的新颖泛化,而ConT通过引入时间的潜在表示来获得全面的性能,在稀疏的情节张量上表现出色。
DE-SimplE: 受到历时词嵌入的启发,DE-SimplE将历时实体嵌入函数与静态模型SimplE相结合,能够指导模型学习实体在任意时间点上的时间特征,用于时间知识图谱补全。
TNTComplEx: 受到四阶张量的规范分解的启发,TNTComplEx引入了ComplEx的扩展来进行时间知识图谱补全。虽然TNTComplEx取得了相当好的性能,但很难准确确定张量的秩。

所有上述的时间方法都将时间信息与实体和/或谓词相关联,以获得时间嵌入,然后将嵌入与静态模型结合用于时间知识图谱补全。与此一致,本文提出了一个用于时序知识图谱补全的四阶张量的Tucker分解,并从不同方面引入了几种正则化约束来协调所提出的分解。
实验证明,该算法达到了最先进的性能水平。

背景

CP分解将一个张量分解为一组分量秩为一的张量之和。而Tucker分解是高阶PCA的一种形式,它将一个张量分解为一个核心张量乘以沿每个模式的矩阵。具体而言,给定一个张量X ∈ Rn1×n2×n3,Tucker分解可以沿着三个模式对X进行分解,得到核心张量G和三个矩阵A,B,C:
在这里插入图片描述
其中◦表示向量外积。核心张量G ∈ Rr1×r2×r3可以捕捉不同组件之间的交互信息。每个模式中的矩阵A ∈ Rn1×r1,B ∈ Rn2×r2,C ∈ Rn3×r3彼此正交。×n表示沿第n个模式的张量乘积。此外,如果核心张量是超对角的且满足r1 = r2 = r3,则Tucker分解等价于CP分解。

后来,TuckER采用这种类型的分解进行知识图谱补全,将矩阵A和C视为实体嵌入E,E = A = C ∈ Rne×de,其中ne表示实体数量,de表示实体嵌入的维度。将B视为谓词嵌入R,R = B ∈ Rnr×dr,其中nr和dr分别表示谓词数量和谓词嵌入的维度。评分函数表示如下:
在这里插入图片描述
其中W ∈ Rde×dr×de也是核心张量,W中的参数数量仅取决于实体和谓词的嵌入维度,而不取决于实体或谓词的数量。同时,TuckER还证明基于CP分解的ComplEx是TuckER的一种特殊情况。

提出的模型

时态事实(s,r,o,t)给三元组(s,r,o)赋予一个时态标签t,以确保其准确性。时态信息隐含在正确三元组事实的实体或谓词中。例如,如果事实(Barack Obama,PresidentOf,America)是普遍真实的,那么4元组的时态元素[2008, 2016]隐含在Barack Obama的主体实体、PresidentOf的谓词或America的客体实体中。可以将上述三种情况表示为以下形式:
• (Barack Obama&[2008, 2016],PresidentOf,America):从2008年到2016年的那个时期,Barack Obama是美国总统。也就是说,三元组中的Barack Obama实体指的是2008年到2016年的那个时期的Barack Obama。
• (Barack Obama,PresidentOf&[2008, 2016],America):Barack Obama是2008年到2016年期间的美国总统。
• (Barack Obama,PresidentOf,America&[2008, 2016]):Barack Obama是2008年到2016年期间的那个美国的总统。

尽管时间戳信息强调了不同对象以分别表达它们的时态性质,但这三个事实准确地表达了相同的含义。因此,我们可以从三元组中提取时间信息T,以4元组的形式表达时间事实。同时,时间戳的嵌入维度与谓词或实体的嵌入维度相同。因此,通过添加时间信息T,TuckER分解可以自然地扩展为以下形式:
在这里插入图片描述
其中M ∈ Rde×dr×de×dt是核心张量。我们称这种分解为TuckERT,其中E表示实体,R表示谓词,T表示时间信息。给定时间事实(es,er,eo,et),TuckERT分解可以表示为以下内积形式:
在这里插入图片描述
如上面的例子所述,时间信息可以与主语、谓词或客体相关联,以获得时间相关的嵌入。此外,获得时间相关的嵌入可以视为TuckERT分解的逆过程:
在这里插入图片描述
这里,⊙表示点积,W ∈ Rde×dr×de是在维度2和4上进行折叠的版本。然后,将时态知识图谱补全视为静态方法。此外,值得注意的是,有些事实可能随时间维度而变化,而有些事实则与时间无关。如上所述,事实(Barack Obama,PresidentOf,America)只在2008年到2016年期间成立,(Einstein,WonPrize,NobelPrize)只在1922年成立。而事实(武汉,CityOf,China)的正确性随时间不变。为了建模这两种知识,时态事实和非时态事实,根据在这里插入图片描述
[7,8]提出了TuckERTNT模型,它是TuckERT的一种变体:
在这里插入图片描述
类似地,给定时间事实(es,er,eo,et),TuckERTNT分解的具体形式可以描述如下:
在这里插入图片描述
其中NT是非时态的缩写。与TNTComplEx相比,我们的模型不需要手动选择张量的秩。我们将时间信息与谓词相关联,基于Tucker分解学习时间相关的嵌入,并利用核心张量的参数来增加实体和时间相关谓词之间每个维度的交互水平,从而获得最先进的性能。此外,[6]证明了在对核心张量施加一定约束的前提下,ComplEx等价于TuckER,或者说ComplEx是TuckER的一种特殊情况。我们给出了类似的结果,即在一定约束条件下,TComplEx可以视为与TuckERT等价。

学习

采用数据增强技术,将互为谓词(对象,谓词-1,主语,时间戳)加入训练集。模型参数通过小批量随机梯度下降进行学习。然后,希望最小化瞬时多类损失来训练模型:
在这里插入图片描述
在这里,(s,r,o,t)是一个正样本,(s,r,o’,t)表示通过将真实对象替换为错误对象获得的负样本。需要注意的是,损失函数只能用于训练模型以回答这种形式的查询(主语,谓词,?,时间戳)。由于存在逆样本(对象,谓词-1,主语,时间戳),回答类型为(对象,谓词-1,?,时间戳)的查询已经包含了回答(?,谓词,对象,时间戳)的情况。

此外,期望对从张量因子化得到的矩阵施加正则化约束,以融入时态模式的先验知识并避免过拟合。根据无向图的一个先验假设,即相似节点具有接近的低维表示,我们希望时间戳嵌入满足平滑约束,即相邻时间戳具有接近的表示。时间约束的形式如下:
在这里插入图片描述
为了防止模型过拟合,对主语、时态和非时态谓词、对象以及核心张量施加嵌入正则化约束。此外,出于研究不同嵌入正则化影响的动机,引入了以下两种嵌入正则化方案。由于核心张量包含大量参数,故认为对核心张量施加约束非常重要,可能对模型产生重大影响。因此,基于每种嵌入正则化方案,分别研究对核心张量施加约束和不施加约束的影响。

在这里插入图片描述
其中,||●||F表示 Frobenius范式,||●||k是k次幂的张量范数。
在这里插入图片描述
其中,||●||p l p l_p lp范数,而||●||q表示张量的 q 次幂的张量范数。考虑到瞬时多类损失和上述两类正则化项,我们通过最小化以下损失函数来训练我们的模型:
在这里插入图片描述
其中,R*(E,·)表示以上四种嵌入正则化的其中之一。

时间复杂度和参数增长

在这里插入图片描述

表1列出了所提出的模型TuckERT、TuckERTNT以及基准模型De-SimplE、TComplEx和其变种TNTComplEx的参数数量。基准模型的参数数量与实体数量、谓词数量或嵌入维度d成线性增长关系。而我们的模型的参数数量随着嵌入维度d的增长而增长三倍,因为三维核心张量仅取决于嵌入维度。因此,所提出的模型TuckERT和TuckERTNT的时间复杂度为O(d3)。至于De-SimplE、TComplEx和TNTComplEx,它们的时间复杂度为O(d)。可以看出,在实体数量、谓词数量和嵌入维度固定的前提下,我们的模型包含更多的参数。然而,有人认为,具有许多参数的模型往往容易出现过拟合和可扩展性问题,从而导致性能不佳。表3表明,与基准模型相比,所提出的模型可以通过使用更多可控参数更好地适应大规模离散时间数据。因此,在设计用于时间知识补全的张量分解模型时,一个重要的挑战是在模型参数和数据之间以及表达能力和模型复杂性之间进行权衡。

表达能力分析

对于知识图谱补全模型来说,完全的表达能力是一个非常重要的特性,它指的是模型通过学习能够正确区分正面事实和负面事实的能力。关于我们模型的完全表达能力的证明如下所述。TuckERT对于时间知识图谱补全是完全具备表达能力的。给定一个四元组(es, er, eo, et),其中es、eo ∈ Rne×de 是主语和客体的二进制独热向量表示,er ∈ Rnr×dr, et ∈ Rnt×dr 是谓词和时间戳的二进制独热向量表示。这里,嵌入维度满足de = ne, dr = nr。我们将二进制向量es的第p个元素,er的第k个元素,eo的第q个元素,et的第r个元素设置为1,其他元素设置为0。此外,我们将张量M ∈ Rde×dr×de×dr的第pkqr个元素设置为1,如果时间事实(es, er, eo, et)成立则设置为1,否则设置为-1。根据TuckERT 分解过程:
在这里插入图片描述
实体嵌入、谓词嵌入和时间嵌入与核心张量的内积能够准确地表示原始的时间张量。通过调节核心张量中的参数,模型能够完全区分正样本和负样本。从另一个角度来看,我们可以将核心张量M视为高维空间中的线性分类器,通过学习在低维空间中区分正样本和负样本的能力。

实验

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

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

相关文章

[python 刷题] 19 Remove Nth Node From End of List

[python 刷题] 19 Remove Nth Node From End of List 题目: Given the head of a linked list, remove the nth node from the end of the list and return its head. 题目说的是就是移除倒数第 n 个结点,如官方给的案例: 这里提供的 n 就是…

实时配送跟踪功能的实现:外卖跑腿小程序的技术挑战

在当今数字化时代,外卖和跑腿服务已经成为了生活中不可或缺的一部分。为了提供更好的用户体验,外卖跑腿小程序越来越注重实时配送跟踪功能的实现。这项技术挑战旨在确保顾客可以方便地跟踪他们的订单,以及配送员可以高效地完成送货任务。本文…

经典卷积神经网络 - VGG

使用块的网络 - VGG。 使用多个 3 3 3\times 3 33的要比使用少个 5 5 5\times 5 55的效果要好。 VGG全称是Visual Geometry Group,因为是由Oxford的Visual Geometry Group提出的。AlexNet问世之后,很多学者通过改进AlexNet的网络结构来提高自己的准确…

TDengine小知识-数据文件命名规则

TDengine 时序数据库对数据文件有自己的命名规则,文件名中包含了vnodeID、时间范围、版本、文件类型等多种信息。了解数据文件命名规则,可以让运维工作更简单。 废话不多说,直接上图: v4:文件所属 Vgroup 组&#xf…

leetcode:2347. 最好的扑克手牌(python3解法)

难度:简单 给你一个整数数组 ranks 和一个字符数组 suit 。你有 5 张扑克牌,第 i 张牌大小为 ranks[i] ,花色为 suits[i] 。 下述是从好到坏你可能持有的 手牌类型 : "Flush":同花,五张相同花色的…

安装visual studio报错“无法安装msodbcsql“

在安装visual studio2022时安装完成后提示无法安装msodbcsql, 查看日志文件详细信息提示:指定账户已存在。 未能安装包“msodbcsql,version17.2.30929.1,chipx64,languagezh-CN”。 搜索 URL https://aka.ms/VSSetupErrorReports?qPackageIdmsodbcsql;PackageActi…

用matlab求解线性规划

文章目录 1、用单纯形表求解线性规划绘制单纯形表求解: 2、用matlab求解线性规划——linprog()函数问题:补充代码:显示出完整的影子价格向量 1、用单纯形表求解线性规划 求解线性规划 m i n − 3 x 1 − 4 x 2 x 3 min -3x_1-4x_2x_3 min−…

【ArcGIS模型构建器】04:根据矢量范围批量裁剪影像栅格数据

本文以中国2000-2010-2020年3期GLC30土地覆盖数据为例,演示用模型构建器批量裁剪出四川省3年的数据。 文章目录 一、结果预览二、模型构建三、运行模型四、注意事项一、结果预览 用四川省行政区数据裁剪出的3年Globeland30(配套实验数据data04.rar中有三年中国区域成品数据)…

Java编写图片转base64

图片转成base64 url , 在我们的工作中也会经常用到,比如说导出 word,pdf 等功能,今天我们尝试写一下。 File file new File("");byte[] data null;InputStream in null;ByteArrayOutputStream out null;try{URL url new URL(&…

NAS搭建指南三——私人云盘

一、私人云盘选择 我选择的是可道云进行私人云盘的搭建可道云官网地址可道云下载地址,下载服务器端和 Windows 客户端可道云官方文档 二、环境配置 PHP 与 MySQL 环境安装:XAMPP 官网地址 下载最新的 windows 版本 安装时只勾选 MySQL 与 PHP相关即可…

信号继电器驱动芯片(led驱动芯片)

驱动继电器需要配合BAV99(防止反向脉冲)使用 具体应用参考开源项目 电阻箱 sbstnh/programmable_precision_resistor: A SCPI programmable precision resistor (github.com) 这个是芯片的输出电流设置 对应到上面的实际开源项目其设置电阻为1.5K&…

侯捷C++面向对象程序设计笔记(上)-Object Based(基于对象)部分

基于对象就是对于单一class的设计。 对于有指针的:complex.h complex-test.cpp 对于没有指针的: string.h string-test.cpp https://blog.csdn.net/ncepu_Chen/article/details/113843775?spm1001.2014.3001.5501#commentBox 没有指针成员——以复数co…

力扣第55题 跳跃游戏 c++ 贪心 + 覆盖 加暴力超时参考

题目 55. 跳跃游戏 中等 相关标签 贪心 数组 动态规划 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true &…

【RocketMQ系列十二】RocketMQ集群核心概念之主从复制生产者负载均衡策略消费者负载均衡策略

您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦。 💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精…

自动驾驶之—车道线感知

零、前言 : 最近在学习自动驾驶方向的东西,简单整理一些学习笔记,学习过程中发现宝藏up 手写AI 一、视觉系统坐标系 视觉系统一共有四个坐标系:像素平面坐标系(u,v)、图像坐标系(x,y&#xff09…

开源WAF--Safeline(雷池)测试手册

长亭科技—雷池(SafeLine)社区版 官方网站:长亭雷池 WAF 社区版 (chaitin.cn) WAF 工作在应用层,对基于 HTTP/HTTPS 协议的 Web 系统有着更好的防护效果,使其免于受到黑客的攻击 1.1 雷池的搭建 1.1.1 配置需求 操作系统:Linux 指令架构&am…

【数据结构与算法】二叉树的运用要点

目录 一,二叉树的结构深入认识 二,二叉树的遍历 三,二叉树的基本运算 3-1,计算二叉树的大小 3-2,统计二叉树叶子结点个数 3-3,计算第k层的节点个数 3-4,查找指定值的结点 一,二叉…

Spring底层原理(二)

Spring底层原理(二) BeanFactory的实现 //创建BeanFactory对象 DefaultListableBeanFactory factory new DefaultListableBeanFactory(); //注册Bean定义对象 AbstractBeanDefinition beanDefinition BeanDefinitionBuilder.genericBeanDefinition(SpringConfig.class).set…

搭建Pytorch的GPU环境超详细

效果 1、下载和安装VS2019 https://visualstudio.microsoft.com/zh-hans/vs/older-downloads/ 登录需要用户名和密码 安装后需要联网下载组件的,安装的时候要勾选使用C++的桌面开发 2、下载和安装显卡驱动 查看自己的显卡型号 从英伟达下载和安装最新驱动

Python学习笔记——MYSQL,SQL核心

食用说明:本笔记适用于有一定编程基础的伙伴们。希望有助于各位! SQL语言分类 SQL注释 库管理 表管理 数据操作 分组聚合 分页限制 需要注意的是关键字的顺序不可以错乱,否则会报错其中LIMIT关键字的n是指从第n个开始,m是指查…