从多模态生物图数据中学习Gene的编码-MuSeGNN

由于数据的异质性,在不同的生物医学背景下发现具有相似功能的基因对基因表示学习提出了重大挑战。在本研究中,作者通过引入一种称为多模态相似性学习图神经网络的新模型来解决这个问题,该模型结合了多模态机器学习和深度图神经网络,从单细胞测序和空间转录组数据中学习基因表示。利用来自10个组织、3种测序技术和3个物种的82个训练数据集,作者创建了用于模型训练和基因表示生成的信息图结构,同时结合正则化与加权相似学习和对比学习来学习跨数据集的基因-基因关系。这种新颖的设计确保了我们可以在联合空间中提供包含不同上下文功能相似性的基因表示。全面的基准分析表明,模型能够有效地捕获多种模态下的基因功能相似性,在基因表示学习方面比最先进的方法高出97.5%。此外,作者将生物信息学工具与基因表征相结合,以揭示pathway富集、调控网络以及疾病相关或剂量敏感基因的功能。因此,该模型有效地为基因功能、组织功能、疾病和物种进化的分析提供了统一的基因表示。

来自:MuSe-GNN: Learning Unified Gene Representation From Multimodal Biological Graph Data
工程地址:https://github.com/HelloWorldLTY/MuSe-GNN

目录

  • 背景概述
  • 相关工作
    • 基因共表达网络分析
    • 基于网络的生物表示学习
    • 图Transformer
  • 方法
    • 前言
    • 图构建
    • Cross-Graph Transformer
    • 图重建损失
    • 相似性权重学习
    • 自监督图对比学习
  • Reference

背景概述

生物技术的进步扩大了生物数据的多样性。这种技术的一个主要例子是单细胞测序,它允许对单个细胞内的遗传信息进行全面表征。该技术提供了获取细胞转录组学、表观基因组学和蛋白质组学全部信息的途径,包括基因表达scRNA-seq、染色质可及性scATAC-seq、甲基化和抗体。通过对来自同一组织的不同时间点的细胞进行测序,我们还可以深入了解细胞活动随时间变化的模式。此外,细胞活动的空间信息代表了一个同样重要的额外维度。这样的数据被定义为空间数据。所有这些数据都被称为多组学数据,整合多组学数据是一个重大挑战。

然而,传统的以细胞为anchor的多组学数据整合思路不是完全适用的[56,87,39],因为存在以下挑战:

  • 不同组学数据本身具有挑战。例如,空间转录组数据的观察单位与其他单细胞数据不同,因为单个空间位置包含来自不同细胞的混合信息(见图1a左侧部分),因此不适合基于基因表达相似性生成空间簇。目前的研究也表明染色体可及性特征并不是细胞水平上基因表达的有力预测因子[86]。
  • atlas-level的研究中庞大的数据量对高性能计算提出了挑战,往往存在内存不足或超时错误的风险。由于人体有近37.2万亿个细胞,综合分析在计算上具有很大的难度。而且,严重的批次效应可能通过引入噪声对分析结果产生不利影响。

因此,迫切需要一种专注于多组学和多组织数据(称为多模态生物数据)分析的高效而强大的方法来应对这些挑战。

由于认识到细胞导向的观点所带来的困难,先前的工作开始将重点转移到基因视角。基于物种进化过程中的自然选择,使用基因集作为表达谱的总结,可能会提供更可靠的依据[8]。蛋白质编码相关的基因也被认为与药物具有相互作用[19],这与疾病和药物发现更相关。Gene2vec是受Word2vec启发的一种方法,它通过从共表达网络中生成skip-gram对来学习基因表示。最近,基于Node2vec和OhmNet的基于基因的数据整合与分析技术(gene -based data Integration and ANalysis Technique, GIANT)[16]被开发出来,用于学习单细胞和空间数据集中的基因表示。然而,如图1b所示,基于这两种模型的基因嵌入,没有观察到来自不同数据集但同一组织的基因的显著功能聚类,因为这些方法没有从不同的多模态数据推断相关基因的相似性。此外,他们没有提供定量评估基因嵌入性能的指标。

在这里,作者从基因的角度介绍了一种新的多模态相似学习图神经网络MuSe-GNN,用于多模态生物数据整合。MuSe-GNN的整体工作流程如图1a所示。图1b显示与GIANT和Gene2vec相比,MuSe-GNN通过合适的模型结构和新颖的损失函数,在跨数据集的基因之间学习功能相似性的能力更强。MuSe-GNN利用权值共享GNN将不同模态的基因编码到一个由相似学习策略和对比学习策略正则化的共享空间中。在单图层面,图神经网络的设计保证了MuSe-GNN能够学习到每个共表达网络中的邻居信息,从而保持基因功能的相似性。在跨数据层面,相似学习策略确保MuSe-GNN能够将功能相似的基因整合到一个共同的簇中,而对比学习策略则有助于区分功能不同的基因。

fig1

  • 图1:介绍了MuSe-GNN的工作流程、基因嵌入的可视化以及GIANT和Gene2vec两种现有方法存在的问题。
  • a:MuSe-GNN学习基因嵌入的过程。在这里,作者强调单细胞数据和空间数据的区别,以及基因嵌入的主要应用。单细胞数据中的每个点代表一个细胞,而空间数据中的每个点代表混合细胞。
  • b:MuSe-GNN、Gene2vec和GIANT基因嵌入的UMAPs。它们是按数据集着色的。基于UMAPs,可以得出结论,Gene2vec和GIANT都未能基于来自同一组织的数据集学习基因相似性,而MuSe-GNN产生了与数据集无关的有意义的嵌入。

这是第一篇将多模态机器学习MM-ML概念与GNNs设计相结合的基因表示学习论文。这两种方法在SOTA机器学习研究中都很普遍,这激发了作者将它们应用于大规模多模态生物数据集的联合分析。作为应用实例,作者首先使用MuSe-GNN生成的基因嵌入来研究人体基因调控的关键生物过程和网络。然后,还将该模型应用于分析COVID和癌症数据集,旨在揭示基于特定差异共表达基因的潜在抗病机制或并发症。最后,利用MuSe-GNN的基因嵌入来提高基因功能的预测精度。在这里,基因共表达意味着两个基因与同一边相连。

鉴于缺乏评估基因嵌入的明确指标,作者提出了六个指标,灵感来自单细胞数据分析中的批次整合问题。作者使用来自一种技术的真实生物数据集来评估模型,基准测试结果表明MuSe-GNN在综合评估中从20.1%显着提高到97.5%。为了总结模型的优势,MuSe-GNN解决了关于跨数据基因相似性学习的问题,并提供了四个主要贡献:

  • 为多结构生物数据提供了一种有效的表示学习方法。
  • 将来自不同组学和组织数据的基因整合到一个联合空间中,同时保留生物异质性。
  • 用相似性函数识别共表达基因。
  • 推断基因的特殊网络以及基因与生物通路或基因与疾病之间的关系。

相关工作

基因共表达网络分析

虽然跨模态的基因功能联合分析的直接尝试是有限的,目前在识别基于单个数据集的相关网络方面存在研究。WGCNA[52]是一种采用分层聚类识别具有共享功能基因模块的代表性方法。然而,作为一种早期工具,WGCNA的功能有限。总之,对共表达网络的推断需要更严格的方法,并且应该应用于多模态数据。

基于网络的生物表示学习

除了直接生成基因共表达网络外,也可以在低维空间中学习定量的基因表示从而更好地描述基因关系并促进下游分析。Gene2vec基于给定数据库的共表达网络生成基因嵌入。然而,它忽略了表达谱信息,并基于2017年之前的旧基因表达Omnibus (GEO)。GIANT利用Node2vec和OhmNet,通过构造图进行训练,从单细胞和空间数据集中学习基因表示。然而,这种方法仍然通过去除表达谱来过度压缩多模态生物数据集。此外,由Pearson correlation建立的共表达网络具有较高的假阳性率。此外,GIANT使用的一些数据集质量很低。也有一些方法共享了从其他数据集学习嵌入的类似目标。GSS旨在使用主成分分析(PCA)和聚类分析从bulk-seq数据集中学习一组所有基因的通用表示。然而,它是用于bulk测序数据,不能直接应用于来自不同组织的单细胞数据集。Gemini[103]专注于整合不同的蛋白质功能网络,用图节点代表蛋白质而不是基因。

图Transformer

在深度学习领域,Transformer是最成功的模型之一,它利用了seq2seq结构设计、多头自注意力设计和位置编码设计。许多研究人员试图将Transformer的优点结合到图结构学习中。TransformConv[81]为监督分类任务的图版本引入了多头注意机制,并取得了显著的改进。MAGNA[98]考虑图数据中更高层次的跳关系来增强节点分类能力。Graphomer [110] 使用来自 Open Graph Benchmark Large-Scale Challenge 的数据展示了 Transformer 结构对各种任务的积极影响,GraphomerGD [111] 进一步扩展了该挑战。最近,GPS[75]通过考虑额外的编码类型,提出了一种通用的Graph Transformer。此外,Transformer架构也为一些生物学问题提供了解决方案[113]。scBERT使用预训练模型生成基因和细胞嵌入,以提高细胞类型注释的准确性。总之,这些努力的实质影响突出了Transformer结构对Graph数据学习的重要贡献。

方法

在介绍MuSe-GNN的以下部分中,作者详细说明利用多模态生物数据构建图的不同方法,然后解释所提出的权重共享网络架构和最终损失函数的元素。

前言

GNN,GNNs旨在学习具有图结构数据的节点(特征)的图表示。现代GNNs通过聚合其 k k k阶邻居( k ≥ 1 k≥1 k1)的表示并将其与当前表示结合来迭代更新节点的表示。考虑一个图 G = { V , E } G=\left\{V,E\right\} G={V,E},其节点为 V = { v 1 , . . . , v n } V=\left\{v_{1},...,v_{n}\right\} V={v1,...,vn},节点 v i v_{i} vi的聚合与更新为: a i ( l + 1 ) = A G G R E G A T E ( l + 1 ) ( { h j ( l ) : j ∈ N ( v i ) } ) h i ( l + 1 ) = C O M B I N E ( l + 1 ) ( h i ( l ) , a i ( l + 1 ) ) a_{i}^{(l+1)}=AGGREGATE^{(l+1)}(\left\{h_{j}^{(l)}:j\in N(v_{i})\right\})\\ h_{i}^{(l+1)}=COMBINE^{(l+1)}(h_{i}^{(l)},a_{i}^{(l+1)}) ai(l+1)=AGGREGATE(l+1)({hj(l):jN(vi)})hi(l+1)=COMBINE(l+1)(hi(l),ai(l+1))其中, h i ( l ) h_{i}^{(l)} hi(l) h i ( l + 1 ) h_{i}^{(l+1)} hi(l+1)分别是MPNN前后的节点特征。

问题定义,通过处理多模态生物数据集来解决基因嵌入生成任务,表示为 D = ( { V i , E i } i = 1 T ) D=(\left\{V_{i},E_{i}\right\}_{i=1}^{T}) D=({Vi,Ei}i=1T)。目标是构建模型 M ( ⋅ , θ ) M(\cdot,\theta) M(,θ),设计产生基因embedding集 ε = { e 1 , . . . , e T } = M ( D , θ ) \varepsilon=\left\{e_{1},...,e_{T}\right\}=M(D,\theta) ε={e1,...,eT}=M(D,θ)。本质上,目标是在统一的投影空间内协调来自不同模态的基因信息,从而产生统一的基因表示。

图构建

在构建基因图之前,作者的第一个贡献涉及每个数据集的高可变基因hvg的选择。这些hvg构成了一组具有高度变异的基因,可以代表给定表达谱的生物学功能。此外,作者认为共表达网络对基因表征学习很重要,因为它使我们能够表征基因与基因之间的关系。由于测序深度(测序深度越高,我们对于每个单细胞的RNA表达数据就越准确和全面),或每个细胞的总计数,经常成为共表达网络推断的一个混淆因素[11],作者采用了两种独特的方法,scTransform和CS-CORE,来处理scRNA-seq和scATAC-seq数据,从而创建不受测序深度影响的基因表达谱和共表达网络(基于多模态单细胞数据构建共表达网络-MuSeGNN)。对于空间转录组学数据,重点是显示具有空间表达模式的基因。作者使用SPARK-X识别这些基因,然后应用scTransform和CS-CORE。在生成的所有图中,节点代表基因,边代表基因的共表达关系。

Cross-Graph Transformer

为了在训练过程中利用Transformer模型的优势,作者集成了一个具有多头自注意设计的图神经网络,称为TransformerConv,以合并共表达信息并生成基因嵌入。结合多模态信息可以估计出更准确的基因嵌入。cross-graph transformer可以在不同的图中高效地学习包含基因功能的基因嵌入。

TransformerConv
c c c作为注意力头的index,从节点 j j j到节点 i i i的GNN多头注意力表示为: q c , i ( l ) = W c , q ( l ) h i ( l ) + b c , q ( l ) k c , j ( l ) = W c , k ( l ) h j ( l ) + b c , k ( l ) e c , i j = W c , e e i j + b c , e α c , i j ( l ) = < q c , i ( l ) , k c , j ( l ) , e c , i j > ∑ u ∈ N ( i ) < q c , i ( l ) , k c , u ( l ) , e c , i u > q_{c,i}^{(l)}=W_{c,q}^{(l)}h_{i}^{(l)}+b_{c,q}^{(l)}\\ k_{c,j}^{(l)}=W_{c,k}^{(l)}h_{j}^{(l)}+b_{c,k}^{(l)}\\ e_{c,ij}=W_{c,e}e_{ij}+b_{c,e}\\ \alpha_{c,ij}^{(l)}=\frac{<q_{c,i}^{(l)},k_{c,j}^{(l)},e_{c,ij}>}{\sum_{u\in N(i)}<q_{c,i}^{(l)},k_{c,u}^{(l)},e_{c,iu}>} qc,i(l)=Wc,q(l)hi(l)+bc,q(l)kc,j(l)=Wc,k(l)hj(l)+bc,k(l)ec,ij=Wc,eeij+bc,eαc,ij(l)=uN(i)<qc,i(l),kc,u(l),ec,iu><qc,i(l),kc,j(l),ec,ij>其中, < q , k , e > = e q T k d <q,k,e>=e^{\frac{q^{T}k}{\sqrt{d}}} <q,k,e>=ed qTk d \sqrt{d} d 是用于减少梯度消失的标量。不同的 q q q k k k代表不同的query vector和key vector, e e e代表边的特征。注意力 α c , i j ( l ) \alpha_{c,ij}^{(l)} αc,ij(l)代表第 c c c个注意力头(第 l l l层)输出的从节点 j j j i i i的注意力值。 h h h代表节点embedding。

定义节点embedding h i ( l + 1 ) h_{i}^{(l+1)} hi(l+1)的更新为: v c , j ( l ) = W c , v ( l ) h j ( l ) + b c , v ( l ) h i ( l + 1 ) = ∣ ∣ c = 1 C [ ∑ j ∈ N ( i ) α c , i j ( l ) ( v c , j ( l ) + e c , i j ) ] v_{c,j}^{(l)}=W_{c,v}^{(l)}h_{j}^{(l)}+b_{c,v}^{(l)}\\ h_{i}^{(l+1)}=||_{c=1}^{C}[\sum_{j\in N(i)}\alpha_{c,ij}^{(l)}(v_{c,j}^{(l)}+e_{c,ij})] vc,j(l)=Wc,v(l)hj(l)+bc,v(l)hi(l+1)=c=1C[jN(i)αc,ij(l)(vc,j(l)+ec,ij)]其中, ∣ ∣ c = 1 C ||_{c=1}^{C} c=1C表示 C C C个注意力头的concat。

权重共享
考虑到多模态生物数据集之间的差异性,作者采用了权重共享机制来确保模型在不同的图中学习共享信息,这代表了一种学习交叉图关系的新方法。

数据集和多模态Graph Transformer
对于来自相同模态 m m m的每个graph ( G 1 , G 2 , … , G n ) (G_1, G_2,…, G_n) (G1,G2,,Gn),作者不仅采用了数据集特定的GT layers L 1 , L 2 , … , L n L_1, L_2,…, L_n L1,L2,,Ln,而且还将所有这些数据集特定的layers连接到一组共享的GT层,记为 D m D_m Dm。该设计展示了作者将权重共享纳入GT框架的新方法。给定网络参数为 θ ∗ θ∗ θ的数据集 i i i,MuSe-GNN的计算过程定义如下: X i ′ = D m ( L i ( G i ; θ L i ) ; θ D m ) X_{i}'=D_{m}(L_{i}(G_{i};\theta_{L_{i}});\theta_{D_{m}}) Xi=Dm(Li(Gi;θLi);θDm)

Datasets Decoder
作者提出了一种基于MLP的数据集专用解码器结构。该解码器模型对于重建不同基因之间的共表达关系至关重要。给定图 G i G_i Gi及其对应的基因嵌入 e i e_i ei,则网络参数为 θ d e c , i θ_{dec,i} θdec,i的MuSe-GNN解码过程定义如下: E r e c = M L P ( e i e i T ; θ d e c , i ) E_{rec}=MLP(e_{i}e_{i}^{T};\theta_{dec,i}) Erec=MLP(eieiT;θdec,i)其中 E r e c E_{rec} Erec代表重建的共表达网络。

图重建损失

在单个Graph中,作者实现了一个受图自编码器(GAE)启发的损失函数。这个函数的目的是保持两个关键方面:1具有共同功能的基因之间的相似性,2具有不同功能的基因之间的区别。这种对GAE的损失函数使用构成了对方法设计的贡献。对于图 G i = { V i , E i } G_{i}=\left\{V_{i}, E_{i}\right\} Gi={Vi,Ei},定义edge重建的损失函数为: e i = D m ( L i ( G i ; θ L i ) ; θ D m ) E r e c = M L P ( e i e i T ; θ d e c , i ) e_{i}=D_{m}(L_{i}(G_{i};\theta_{L_{i}});\theta_{D_{m}})\\ E_{rec}=MLP(e_{i}e_{i}^{T};\theta_{dec,i}) ei=Dm(Li(Gi;θLi);θDm)Erec=MLP(eieiT;θdec,i)然后计算 E r e c E_{rec} Erec E i E_{i} Ei之间的BCE L B C E L_{BCE} LBCE(因为重建的是edge)。

相似性权重学习

为了整合来自不同数据集的共享生物信息,作者将输入图结构的重建损失与余弦相似学习损失融合在一起。在这个过程中,作者将每对数据集之间的共同HVG作为anchors。目标是最大化跨数据集的公共HVG的embedding相似度 c o s ( a , b ) cos(a,b) cos(a,b)(图2中的黄色blocks)。然而,在实践中,不同的公共HVG在两个数据集中可能具有不同程度的功能相似度,这很难直接量化。因此,作者采用共享社区得分作为间接度量,将其作为最终损失函数中不同公共HVG pairs余弦相似度的权重。

对于两个Graph G i G_{i} Gi G j G_{j} Gj,其中有一个共享基因 g g g,作者在两个图中得到了给定基因 g g g的共表达基因,记为 N i g N_{ig} Nig N j g N_{jg} Njg。因此,基因 g g g的权值 λ i j g λ_{ijg} λijg可表示为: λ i j g = ∣ N i g ∩ N j g ∣ ∣ N i g ∪ N j g ∣ λ_{ijg}=\frac{|N_{ig}\cap N_{jg}|}{|N_{ig}\cup N_{jg}|} λijg=NigNjgNigNjg我们可以在这两个图之间从1到 n n n遍历所有共享基因,最终得到一个向量 λ i j = [ λ i j 1 , . . . , λ i j n ] \lambda_{ij}=[\lambda_{ij1},...,\lambda_{ijn}] λij=[λij1,...,λijn]。该向量封装了所有公共HVG中两个图之间的相似性。然后,我们可以修改各种基因pair的余弦相似度,首先将这个向量与余弦相似度相乘,然后将所有基因的结果值相加。最终结果取负得到相似度损失 L s i m L_{sim} Lsim

自监督图对比学习

具体而言,在整合多模态生物数据时,作者采用了对比学习策略,以确保功能相似的基因尽可能紧密地聚集在一起,而功能不同的基因则相互分离。作者利用信噪比估计(InfoNCE)作为损失函数的一部分来最大化anchor基因和具有相同功能的基因之间的相互信息。这种损失适用于训练过程中任意两个Graph中的不同基因。一般来说,如果我们表示 N N N个基因的embedding为 G e n e N = { e 1 , . . . , e N } Gene_{N}=\left\{e_{1},...,e_{N}\right\} GeneN={e1,...,eN},InfoNCE被设计为最小化: L i n f o N C E = − E [ l o g e x p ( e ⋅ k + / τ ) ∑ i = 0 K e x p ( e ⋅ k i / τ ) ] L_{infoNCE}=-\mathbb{E}[log\frac{exp(e\cdot k_{+}/\tau)}{\sum_{i=0}^{K}exp(e\cdot k_{i}/\tau)}] LinfoNCE=E[logi=0Kexp(eki/τ)exp(ek+/τ)]其中,样本 { k 0 , k 1 , k 2 … } \left\{k_0, k_1, k_2…\right\} {k0,k1,k2}组成一组基因嵌入,称为一个字典, e e e是一个query基因嵌入。 k + k_{+} k+ k i k_{i} ki分别是 e e e的正样本和负样本。

fig2

  • MuSe-GNN的整体模型架构和损失函数设计。

Reference

[8]Computational principles and challenges in single-cell data integration
[11]Depth normalization for single-cell genomics count data
[16]A unified analysis of atlas single cell data
[19]Dgidb 3.0: a redesign and expansion of the drug–gene interaction database
[39]Integrated analysis of multimodal single-cell data
[52]Wgcna: an r package for weighted correlation network analysis
[56]Clustering of single-cell multi-omics data with a multimodal deep learning method
[75]Recipe for a general, powerful, scalable graph transformer
[81]Masked Label Prediction: Unified Message Passing Model for Semi-Supervised Classification
[86]Dynamic genetic regulation of gene expression during cellular differentiation
[87]Comprehensive Integration of Single-Cell Data
[98]Multi-hop attention graph neural networks
[103]Gemini: memory-efficient integration of hundreds of gene networks with high-order pooling
[110]Do transformers really perform badly for graph representation?
[111]Rethinking the expressive power of GNNs via graph biconnectivity
[113]Applications of transformer-based language models in bioinformatics: A survey

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux gcc day3

find命令&#xff08;importance&#xff09;&#xff1a; 语法&#xff1a;find pathname -options find /root -name test.c which命令&#xff1a; which [指令] 只搜索指令&#xff0c;在什么位置下 为什么文件夹带有颜色呢&#xff1f; 科普补充alias命令&#xff1a; ali…

redis的简单操作

redis中string的操作 安装 下载可视化软件&#xff1a;https://gitee.com/qishibo/AnotherRedisDesktopManager/releases。 Mac安装redis&#xff1a; brew install redisWindows安装redis: 安装包下载地址&#xff1a;https://github.com/tporadowski/redis/releases 1.…

C语言进阶课程学习记录-第20课 - 链接过程简介

C语言进阶课程学习记录-第20课 - 链接过程简介 链接器静态链接实验-静态链接源代码生成目标文件打包生成静态库文件直接编译使用静态库编译 动态链接实验-动态链接源代码生成动态链接库文件直接编译使用动态链接库编译运行test.out删除dlib.so运行test.out 小结 本文学习自狄泰…

[LeetCode][LCR133]位 1 的个数——快速从右边消去1

题目 LCR 133. 位 1 的个数 编写一个函数&#xff0c;输入是一个无符号整数&#xff08;以二进制串的形式&#xff09;&#xff0c;返回其二进制表达式中数字位数为 ‘1’ 的个数&#xff08;也被称为 汉明重量).&#xff09;。 提示&#xff1a; 请注意&#xff0c;在某些语言…

静态路由协议实验1

要求&#xff1a; 使用静态路由协议使得全网可达。 第一步、规划IP地址。并配置IP。 第二步、写静态路由 [r1]ip route-static 192.168.3.0 24 192.168.2.2 [r1]ip route-static 192.168.4.0 24 192.168.2.2 [r1]ip route-static 192.168.5.0 24 192.168.2.2[r2]ip route-st…

计算机中丢失steam_api64.dll怎么办?七个方法教你轻松解决

在计算机使用过程中&#xff0c;我们经常会接触到各种各样的动态链接库&#xff08;DLL&#xff09;文件。其中&#xff0c;steamapi64.dll是Steam游戏平台中的一个关键组件&#xff0c;它为Windows操作系统带来了许多好处。本文将详细介绍steamapi64.dll对Windows的好处以及其…

用顺序表实现通讯录

前言 这次的通讯录是基于上一篇的动态顺序表的基础上实现的&#xff0c;如果对动态顺序表不熟悉&#xff0c;可以打开这个链接阅读http://t.csdnimg.cn/9zJ5g&#xff0c;这里我们会调用动态顺序表的函数。 如果想看静态顺序表实现通讯录&#xff0c;可以打开这个链接阅读http:…

thinkphp6入门(21)-- 如何删除图片、文件

假设文件的位置在 /*** 删除文件* $file_name avatar/20240208/d71d108bc1086b498df5191f9f925db3.jpg*/ function deleteFile($file_name) {// 要删除的文件路径$file app()->getRootPath() . public/uploads/ . $file_name; $result [];if (is_file($file)) {if (unlin…

Vite 项目中环境变量的配置和使用

Vite 项目中环境变量的声明 我们要在 Vite 项目中进行环境变量的声明&#xff0c;那么需要在项目的根目录下&#xff0c;新建 .env.[mode] 文件用于声明环境变量&#xff0c;如&#xff1a; .env.test 文件用于测试环境下项目全局变量的声明.env.dev 文件用于开发环境下项目全…

创意绘图小程序:绘画与实用功能的完美融合

创意绘图小程序&#xff1a;绘画与实用功能的完美融合 在数字化时代&#xff0c;创意绘图小程序以其便捷性、互动性和创新性&#xff0c;成为了人们表达自我、释放创意的新平台。本文将介绍一款集白板画、黑板画功能于一身&#xff0c;同时融合画笔调整、画布清空、橡皮擦清除…

在线考试|基于Springboot的在线考试管理系统设计与实现(源码+数据库+文档)

在线考试管理系统目录 目录 基于Springboot的在线考试管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、前台&#xff1a; 2、后台 管理员功能 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主…

C语言动态内存空间分配

1. 前言 在讲内存分配前&#xff0c;咱来聊一下为什么会有内存分配这个概念呢&#xff0c;大家都知道C语言当中是有着许多的数据类型&#xff0c;使用这些数据类型就会在内存上开辟其相对应的空间&#xff0c;那既然会开辟相应的空间&#xff0c;为什么还会有内存分配呢&#x…

【数据库】数据库的介绍、分类、作用和特点,AI人工智能数据如何存储

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《数据库》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识…

深度学习理论基础(三)封装数据集及手写数字识别

目录 前期准备一、制作数据集1. excel表格数据2. 代码 二、手写数字识别1. 下载数据集2. 搭建模型3. 训练网络4. 测试网络5. 保存训练模型6. 导入已经训练好的模型文件7. 完整代码 前期准备 必须使用 3 个 PyTorch 内置的实用工具&#xff08;utils&#xff09;&#xff1a; ⚫…

蓝桥杯 - 穿越雷区

解题思路&#xff1a; dfs 方法一&#xff1a; import java.util.Scanner;public class Main {static char[][] a;static int[][] visited;static int[] dx { 0, 1, 0, -1 };static int[] dy { 1, 0, -1, 0 };static long min Long.MAX_VALUE;static long count 0;publi…

先进电气技术 —— (控制理论)何为稳定性?

一、系统稳定性 在控制理论中&#xff0c;系统稳定性是一个非常关键的概念&#xff0c;它主要涉及系统对外界扰动或内部变动的响应行为。以下是与系统稳定性相关的一些核心名词及其解释&#xff1a; 基本概念 稳定性&#xff08;Stability&#xff09; 系统稳定性是指当系统受…

Autosar工具链配置 CanNM

CAN网络管理filter 网管报文范围0x600~0x6FF repeat message time 超时时间 接收到主动唤醒源&#xff0c;网管报文快发周期&#xff0c;次数&#xff1b;正常周期发送时间 网管报文btye设置&#xff1a;1、重复消息请求位设置 2、ECU地址 wait bus-sleep 定时设置以及网管报…

蓝桥杯第十四届--子树的大小

题目描述 给定一棵包含 n 个结点的完全 m 叉树&#xff0c;结点按从根到叶、从左到右的顺序依次编号。 例如下图是一个拥有 11 个结点的完全 3 叉树。 你需要求出第 k 个结点对应的子树拥有的结点数量。 输入格式 输入包含多组询问。 输入的第一行包含一个整数 T &#xf…

telnet远程管理设备

实验目的&#xff1a;通过本机管理远端设备&#xff0c;模拟本地网卡和远端设备可以通信&#xff0c;配置telnet账户&#xff0c;远程管理设备&#xff0c;不用进入机房方式 拓扑图 云朵模拟本机的网卡&#xff0c;配置ar1的g0/0/0口IP后&#xff0c;确保在同一网络&#xff0…

【正点原子探索者STM32F4】TFTLCD实验学习记录

【正点原子探索者STM32】LCD实验学习记录 硬件硬件连接软件设计变量类型定义LCD参数结构体LCD地址结构体 函数定义读写命令和数据简介6个基本函数坐标设置函数画点函数读点函数字符显示函数LCD初始化 小结参考 硬件 STM32F407、4.3寸LCD屏 硬件连接 LCD_BL(背光控制)对应 PB1…