ESM-IF1:从AF2的预测结构中学习逆折叠
作者研究了从蛋白质骨干原子坐标预测蛋白质序列的问题。迄今为止,机器学习解决此问题的方法一直受限于可用的实验测定蛋白质结构的数量。作者使用AlphaFold2为1200万个蛋白质序列预测的结构,从而将训练数据扩充了近三个数量级。相比现有方法,整体提升了近 10 个百分点。该模型还能推广应用于多种更复杂的任务,包括蛋白质复合物设计、部分mask结构预测、结合界面设计以及多状态预测。
来自:Learning inverse folding from millions of predicted structures, ICML2022
目录
- 背景概述
- 从预测结构中学习逆折叠
- 数据
- 模型架构
- 训练
- 结果
- 固定骨架的蛋白质设计
- 零样本预测
背景概述
设计能编码具有所需特性蛋白质的新型氨基酸序列,即从头蛋白质设计,是生物工程中的一项核心挑战。解决这一问题最成熟的方法是使用能量函数,该函数直接对蛋白质折叠状态的物理基础进行建模。
最近,一类基于深度学习的新方法被提出,这些方法利用生成模型来为特定结构预测序列、生成蛋白质骨干结构、联合生成结构和序列,或者直接对序列进行建模。深度学习生成模型具有直接从数据中学习蛋白质设计规则的潜力,这使得它们有望成为当前基于物理原理的能量函数的替代方法。
然而,实验测定的蛋白质结构数量相对较少,这限制了深度学习方法的应用。实验测定的结构覆盖的蛋白质序列空间不到已知序列空间的0.1%。
在此,作者探究预测结构是否可用于克服实验数据的局限性。随着蛋白质结构预测领域的进展,如今已能够考虑大规模地从预测结构中学习。为大型数据库中的序列预测结构,可将蛋白质序列的结构覆盖范围扩大几个数量级。为了训练用于蛋白质设计的逆向模型,作者使用AlphaFold2为UniRef50中的1200万个序列预测结构。
作者专注于从蛋白质骨干结构预测序列,这一问题也被称为逆折叠(inverse folding)或固定骨干设计(fixed backbone design)。作者将逆折叠视为一个序列到序列的问题,采用自回归编码器-解码器架构。在这个架构中,模型的任务是根据蛋白质骨干原子(backbone atoms)的坐标恢复其天然序列。
- 图1:利用预测结构增强逆折叠研究。为了评估使用预测结构训练蛋白质设计模型的潜力,作者使用AlphaFold2为1200万个UniRef50蛋白质序列预测结构。训练一个自回归逆折叠模型来进行固定骨干蛋白质序列设计。训练集和测试集在拓扑结构层面进行划分,以便在结构独立的骨干上对模型进行评估。作者将具有不变几何输入处理层的Transformer模型与先前工作中使用的完全几何模型进行比较。对输入坐标应用span masking(随机选择连续的一段区域进行mask)和噪声处理。
作者利用大量结构未知的序列,将它们作为额外的训练数据。在没有实验测定结构时,以预测结构为条件来训练模型(见图1)。这种方法类似于机器翻译中的反向翻译,在机器翻译中,一个方向的预测译文被用于改进相反方向的模型。研究发现,即使预测的输入(即结构)质量较低,反向翻译也能有效地从额外的目标数据(即序列)中学习。
作者发现,现有方法受到数据的限制。目前最先进的逆折叠模型在使用预测结构扩充训练数据时性能会下降,然而更大规模的模型和不同的模型架构能够有效地从这些额外数据中学习,这使得在结构上独立的天然骨干序列恢复率提高了近10个百分点。依据先前研究中的固定骨干设计基准对模型进行评估,并在一系列任务中评估其泛化能力,这些任务包括蛋白质复合物和结合位点设计、部分mask骨干结构预测以及多构象分析。作者还进一步探讨了这些模型在零样本预测方面的应用,即预测突变对蛋白质功能和稳定性、复合物稳定性以及结合亲和力的影响。
从预测结构中学习逆折叠
逆折叠的目标是设计出能够折叠成所需结构的序列。在这项研究中,我们专注于蛋白质的骨干结构,暂不考虑侧链。虽然20种氨基酸各自都有特定的侧链,但它们都有一组共同的原子构成氨基酸骨干。在这些骨干原子中,选取氮(N)、α-碳原子(Cα)和碳原子(C)的坐标来代表骨干结构。
- 图2:蛋白质设计任务示意图。
利用天然存在的蛋白质结构,我们可以通过监督模型从其骨干原子在三维空间中的坐标预测蛋白质的天然序列。形式上,这个问题表示为学习条件分布 p ( Y ∣ X ) p(Y | X) p(Y∣X) 。对于长度为 n n n的蛋白质,给定结构中每个骨干原子(N、Cα、C)的空间坐标序列 X = ( x 1 , . . . , x i , . . . , x 3 n ) X = (x_{1}, ..., x_{i}, ..., x_{3n}) X=(x1,...,xi,...,x3n),目标是预测氨基酸的天然序列 Y = ( y 1 , . . . , y i , . . . , y n ) Y = (y_{1}, ..., y_{i}, ..., y_{n}) Y=(y1,...,yi,...,yn) 。这种概率密度通过序列到序列的编码器-解码器进行自回归建模: p ( Y ∣ X ) = ∏ i = 1 n p ( y i ∣ y i − 1 , . . . , y 1 ; X ) p(Y | X)=\prod_{i = 1}^{n} p(y_{i} | y_{i - 1}, ..., y_{1} ; X) p(Y∣X)=i=1∏np(yi∣yi−1,...,y1;X)通过最小化负对数似然来训练模型。
数据
预测结构
作者为UniRef50中的序列生成了1200万个结构,以探究预测结构如何改进逆折叠模型。为了选择用于结构预测的序列,首先使用MSA Transformer预测所有UniRef50序列的多序列比对(MSA)距离图。我们根据距离图的LDDT分数对序列进行排序,以此作为预测质量的指标。选取了长度不超过500个氨基酸的前1200万个序列,并使用AlphaFold2模型对它们进行正向折叠,最后采用Amber力场进行优化松弛。最终得到的预测数据集规模约为实验结构训练集的750倍。
训练与评估数据
作者在CATH数据库中一个结构独立的子集上对模型进行评估。在拓扑结构层面按80/10/10的比例划分CATH数据库,结果是16153个结构被分配到训练集,1457个到验证集,1797个到测试集。需要格外注意防止测试集中的信息通过预测结构泄露。使用Gene3D拓扑分类来筛选训练中用于监督的序列,以及作为AlphaFold2预测输入的多序列比对(MSA)。还在CATH测试集的一个较小子集上进行评估,该子集使用Foldseek通过TMscore进一步筛选,以排除与训练集中任何相似的结构。
- 图3:一个UniRef50序列(UniRef50: P07260;PDB编号:1AP8)的AlphaFold预测结果与实验结构对比示例。实验结构以带透明度的粉色显示。预测结果根据pLDDT置信度分数上色,高置信度区域为蓝色。
模型架构
作者研究使用几何向量感知器(GVP)层的模型架构(Learning from protein structure with geometric vector perceptrons),该架构能够学习向量特征的旋转等变变换以及标量特征的旋转不变变换。
作者展示了三种模型架构的结果:(1) 来自Jing等人的GVP-GNN,它目前是逆折叠领域的最先进模型;(2) 宽度和深度增加的GVP-GNN(GVP-GNN-large);(3) 一种混合模型,由一个GVP-GNN结构编码器和其后的通用Transformer组成(GVP-Transformer)。评估中使用的所有模型都训练至收敛。
在逆折叠过程中,预测出的序列应与结构坐标的参考系无关。对于输入坐标的任何旋转与平移变换 T T T,我们希望模型的输出在这些变换下保持不变,即 p ( Y ∣ X ) = p ( Y ∣ T X ) p(Y|X)=p(Y|TX) p(Y∣X)=p(Y∣TX) 。本文研究的GVP-GNN和GVP-Transformer逆折叠模型均具有这种不变性。
GVP-GNN
从Jing等人所述的具有3个编码器层和3个解码器层的GVP-GNN架构开始,采用Jing等人描述的向量门。作为GVP-GNN的输入,蛋白质结构被表示为邻近图,其中每个氨基酸对应图中的一个节点。节点特征由源自二面角的标量节点特征和源自骨干原子相对位置的向量节点特征组合而成,而边特征则反映了相邻氨基酸的相对位置。
在利用预测结构进行训练时,作者发现一个更深且更宽的GVP-GNN表现更佳,它有8个编码器层和8个解码器层(GVP-GNN-large)。
GVP-Transformer
作者使用GVP-GNN编码器层来提取几何特征,随后接入一个通用的自回归编码器-解码器Transformer。在GVP-GNN中,输入特征具有平移不变性,且每一层都具有旋转等变性。作者对来自GVP-GNN的向量特征进行基变换,转换到为每个氨基酸定义的局部参考系中,以得到旋转不变特征。在对比研究中,增加GVP-GNN编码器层的数量可提升整体模型性能,这表明GVP-GNN中的几何推理能力与Transformer层具有互补性。模型规模扩大至拥有4个GVP-GNN编码器层、8个通用Transformer编码器层和8个通用Transformer解码器层,参数达1.42亿的GVP-Transformer模型时,性能得到提升。
训练
结合实验数据和预测数据
在训练过程中,作者在每个训练轮次将实验得到的结构训练集(约1.6万个结构)与AlphaFold2预测训练集的10%随机样本(1200万个结构中的10%)混合,使得实验数据与预测数据的比例达到1:80。对于更大的模型而言,训练时使用较高比例的预测数据有助于避免在规模较小的实验训练集上出现过拟合现象。虽然添加预测数据能够提升模型性能,但仅使用预测数据进行训练会导致性能大幅下降。
对于目标序列中的每个氨基酸,损失的权重是相等的。ESM-IF1会屏蔽掉AlphaFold2置信度分数(pLDDT)低于90的预测输入坐标,这大约占预测坐标的25%。pLDDT置信度分数的可视化可参见图3。这些低置信度区域通常出现在序列的起始和末尾,可能对应于无序区域。作者在每个序列开头添加一个标记,以表明该结构是实验测定的还是预测得到的。对于每个残基,将AlphaFold2给出的pLDDT置信度分数作为一个特征,通过高斯径向基函数进行编码。
在训练过程中,向预测结构添加尺度为0.1埃的高斯噪声,模型性能会稍有提升。这一发现与埃杜诺夫等人的研究结果一致,他们观察到,与最大后验(MAP)预测相比,使用带噪声的合成数据进行反向翻译能提供更强的训练信号。
跨度掩码
为了实现对部分掩码骨干结构的序列设计,作者在训练过程中引入骨干掩码。对独立随机掩码和跨度掩码都进行了实验。在自然语言处理中,跨度掩码相较于随机掩码能提升性能。作者随机选择长度不超过30个氨基酸的连续跨度,直至15%的输入骨干坐标被掩码。
结果
对于固定骨架设计,作者首先在给定所有骨架坐标的序列设计标准设定下进行评估。然后,作者从三个维度使序列设计任务更具挑战性:(1)对坐标引入mask;(2)推广到蛋白质复合物;(3)基于多种构象进行条件设计。此外,作者表明逆折叠模型对于蛋白质复合物稳定性-protein complex stability、结合亲和力-binding affinity和插入效应-insertion effects是有效的零样本预测器。
固定骨架的蛋白质设计
作者从给定蛋白质骨干原子(N、Cα、C)坐标来预测天然蛋白质序列这一任务入手。针对此任务,困惑度以及在留出的天然序列上的序列恢复情况,是两个常用指标。困惑度衡量的是天然序列在预测序列分布中的逆似然性(似然性越高,困惑度越低)。序列恢复(准确率)衡量的是采样得到的序列在每个位置与天然序列匹配的频率。表1使用困惑度和序列恢复指标,对在结构上留出的骨干上的模型进行了比较。
- 表1:固定骨架的序列设计。基于每个残基的困惑度(越低越好;最低困惑度加粗显示)和序列恢复率(越高越好;最高序列恢复率加粗显示)对模型进行比较。Short代表短序列,Single-chain代表单链,All代表所有类型的序列。
注意到,当前最先进的逆折叠模型受到CATH训练集的限制。在CATH数据集上,将当前100万参数的模型(GVP-GNN)扩展到2100万参数(GVP-GNN-large)会导致过拟合,序列恢复率从42.2%降至39.2%。另一方面,当前100万参数规模的模型无法有效利用预测结构:用预测结构训练GVP-GNN会使序列恢复率降至38.6%,且随着训练中预测结构数量的增加,性能会进一步恶化(图6a)。
- 图6:训练数据的对比研究。a.增加预测结构数量的影响。b.训练期间增加预测结构与实验结构混合比例的影响。对于GVP-GNN-large和GVP-Transformer而言,预测结构比例越高,性能提升越明显。c.GVP-GNN和GVP-Transformer的模型规模。
更大规模的模型得益于利用AlphaFold2预测的UniRef50结构进行训练。相较于仅使用实验测定结构进行训练,使用预测结构训练,GVP-GNN-large的序列恢复率从39.2% 提升至50.8%,GVP-Transformer的序列恢复率从38.3% 提升至51.6% 。这种提升也体现在困惑度上。
部分掩码骨架
作者在部分masking骨架上对模型进行评估。虽然训练期间的掩码操作不会显著改变模型在未掩码骨架上的测试性能,但掩码操作确实能让模型对掩码区域的序列进行有实际意义的预测。尽管GVP-GNN-large在短长度掩码上的困惑度较低,但在掩码长度超过5个氨基酸时,其性能会迅速下降至背景分布的困惑度(图4)。相比之下,GVP-Transformer模型即使在较长的掩码区域也能保持一定性能,如果使用跨度掩码而非独立随机掩码进行训练,其性能下降幅度更小(图4)。
- 图4:不同长度掩码坐标区域的困惑度。对于有几个以上token的掩码区域,GVP-GNN架构的困惑度降至背景分布的困惑度,而GVP-Transformer在长掩码跨度上保持一定的准确率。
蛋白质复合物
尽管训练数据仅包含单链蛋白质(前面的实验也都是单链下的子集),但作者发现这些模型能够推广应用于多链蛋白质复合物。通过在各条链之间添加10个mask token来连接它们,以此表示复合物,并在连接时将用于序列设计的目标链置于开头。作者纳入了CATH测试集中长度不超过1000个氨基酸的所有复合物。对于作为蛋白质复合物组成部分的链而言,与仅输入单链坐标相比,当把完整的复合物坐标作为输入时,两种模型的困惑度都有显著改善(表2)。这表明,GVP-GNN和GVP-Transformer都能够利用来自三维结构上相近但序列上相距较远的氨基酸之间的链间信息。
- 表2:在CATH测试集中,当仅给出一条链的骨干坐标(“链”列)以及给出复合物所有骨干坐标(“复合物”列)时,复合物序列设计的性能。两列中的困惑度均针对复合物中的同一条链进行评估。
多种构象
multi-state设计在工程酶和生物传感器领域备受关注。一些蛋白质以多种不同的折叠形式处于平衡状态,而另一些蛋白质在与伴侣分子结合时可能呈现出不同的构象。
对于一个骨架 X X X,逆折叠模型会针对该骨架预测出可能序列 Y Y Y 的条件分布 p ( Y ∣ X ) p(Y | X) p(Y∣X)。为了设计出与状态 A A A 和状态 B B B 都兼容的蛋白质序列,我们希望找到在每个状态的条件分布 p ( Y ∣ A ) p(Y | A) p(Y∣A) 和 p ( Y ∣ B ) p(Y | B) p(Y∣B) 中具有高似然性的序列。我们将这两个条件似然性的几何平均值,作为以与两种状态都兼容的序列为条件的期望分布 p ( Y ∣ A , B ) p(Y | A, B) p(Y∣A,B) 的近似值。
作者在PDBFlex数据集中87个具有多种构象的测试蛋白质上,比较了单态和多态序列设计的性能。在局部柔性残基上,多态设计比单态设计产生更低的序列困惑度(图7)。
-图7:双态设计。对于PDBFlex中结构独立的蛋白质,以两种构象为条件的GVP-Transformer,在局部柔性残基处产生的序列困惑度,比以单一构象为条件时更低。
零样本预测
接下来的结果表明,逆折叠模型在实际设计应用中是有效的突变效应零样本预测器,包括对复合物稳定性、结合亲和力以及插入效应的预测。为了评估某一突变对特定序列的影响,在已知通过实验测定的野生型结构的情况下,依据逆折叠模型,采用突变序列与野生型序列的似然比来进行衡量。由于GVP-GNN和GVP-Transformer均基于自回归解码器,所以二者都能够进行精确的似然估计。然后,将这些似然比得分与在同一组序列上通过实验测定的适应度值进行比较。
似然比计算
对于给定的蛋白质骨架构象 X X X,逆折叠模型会预测出可能序列 Y Y Y 的条件分布 p ( Y ∣ X ) p(Y|X) p(Y∣X)。这里的 X X X 可以是通过实验测定的野生型蛋白质结构,而 Y Y Y 可以是野生型序列 Y w t Y_{wt} Ywt 或者突变序列 Y m u t Y_{mut} Ymut。
根据逆折叠模型,计算野生型序列的似然值 p ( Y w t ∣ X ) p(Y_{wt}|X) p(Ywt∣X),以及突变序列 Y m u t Y_{mut} Ymut 在相同结构 X X X 下的似然值 p ( Y m u t ∣ X ) p(Y_{mut}|X) p(Ymut∣X)。
似然比(Likelihood Ratio,LR)的计算公式为: p ( Y m u t ∣ X ) p ( Y w t ∣ X ) \frac{p(Y_{mut}|X)}{p(Y_{wt}|X)} p(Ywt∣X)p(Ymut∣X)
复合物稳定性
作者利用Atom3D基准测试对模型进行蛋白质复合物界面突变效应的零样本预测评估。该基准测试将SKEMPI数据库中的结合自由能变化作为一个二元分类任务。作者发现,即使不以预测结构作为训练数据,GVP-GNN的序列对数似然值也是蛋白质复合物稳定性变化的有效零样本预测指标(表C.5),其性能与使用迁移学习的最佳监督方法相当。虽然观察到在训练中加入预测结构后困惑度有显著改善(表2),但这并未进一步提升对SKEMPI中单点突变的复合物稳定性预测(表C.5),这表明仅基于单点突变评估模型可能存在局限性。
- 表C.5:SKEMPI测试集上的蛋白质复合物稳定性(单点突变稳定性增加的二元分类)。尽管逆折叠模型仅在单链上进行训练,但它们能够推广应用于蛋白质复合物。与仅将单链作为输入(chain)相比,将完整复合物作为输入(complex)可提升性能。此处将零样本预测与在SKEMPI训练集上训练的全监督及迁移学习方法进行比较。
结合亲和力
虽然SKEMPI数据集每个蛋白质只有一个突变条目,但我们还想评估逆折叠模型是否能够对同一蛋白质的不同突变进行排序,这可能有助于实现结合亲和力的优化,而结合亲和力优化是治疗性设计中的一项重要任务。借助斯塔尔等人(2020年)生成的一个数据集,评估逆折叠模型是否能够预测突变对结合的影响。在该数据集中,针对新冠病毒受体结合域(RBD)的所有单氨基酸替换,都通过实验测量了其与人血管紧张素转化酶2(ACE2)的结合亲和力。鉴于其在界面优化或设计方面的潜在应用,作者重点关注受体结合基序(RBM)内的突变,RBM是RBD中与ACE2直接接触的部分。当给定所有RBD和ACE2的坐标时,表现最佳的逆折叠模型所产生的RBD序列对数似然值与实验测得的结合亲和力的斯皮尔曼相关性为0.69。当不向模型提供ACE2坐标时,观察到相关性较弱,这表明逆折叠模型会利用结合伙伴的结构信息。当对RBM坐标进行掩码处理时(195个残基中有69个被掩码,掩码范围比模型训练期间更长),不再观察到RBD对数似然值与结合亲和力之间存在相关性,这表明模型依赖界面处的结构信息来识别能够保留结合能力的界面设计。通过逆折叠进行的零样本预测优于基于序列的变体效应预测方法,后者利用每个位置上突变氨基酸与野生型氨基酸之间的似然比来预测突变对结合亲和力的影响。
序列插入
通过在插入区域使用掩码坐标标记,逆折叠模型也能够预测插入效应。在腺相关病毒(AAV)衣壳变体上,发现序列对数似然值的相对差异与布莱恩特等人(2021年)通过实验测量得到的插入效应相关。
相关文章:
ESM-IF1:从AF2的预测结构中学习逆折叠
作者研究了从蛋白质骨干原子坐标预测蛋白质序列的问题。迄今为止,机器学习解决此问题的方法一直受限于可用的实验测定蛋白质结构的数量。作者使用AlphaFold2为1200万个蛋白质序列预测的结构,从而将训练数据扩充了近三个数量级。相比现有方法,…...
kafka服务端之控制器
文章目录 概述控制器的选举与故障恢复控制器的选举故障恢复 优雅关闭分区leader的选举 概述 在Kafka集群中会有一个或多个broker,其中有一个broker会被选举为控制器(Kafka Controler),它负责管理整个集群中所有分区和副本的状态。…...
Redis双写一致性(数据库与redis数据一致性)
一 什么是双写一致性? 当修改了数据库(MySQL)中的数据,也要同时更新缓存(redis)中的数据,缓存中的数据要和数据库中的数据保持一致 双写一致性,根据业务对时间上的要求,…...
feign Api接口中注解问题:not annotated with HTTP method type (ex. GET, POST)
Bug Description 在调用Feign api时,出现如下异常: java.lang.IllegalStateException: Method PayFeignSentinelApi#getPayByOrderNo(String) not annotated with HTTPReproduciton Steps 1.启动nacos-pay-provider服务,并启动nacos-pay-c…...
开源2+1链动模式AI智能名片S2B2C商城小程序:突破流量与创意困境的新路径
摘要:本文深入剖析当前互联网行业中流量集中于巨头以及创意边际效应递减的困境,并探讨开源21链动模式AI智能名片S2B2C商城小程序在应对这些困境时所展现的独特优势与应用策略。通过对行业现状的分析以及该小程序功能特点的研究,旨在为企业在艰…...
python编程-内置函数compile(),exec(),complex(),eval()详解
1. compile() 函数 用途:将一个字符串源代码编译为字节码对象,这样可以直接被Python解释器执行,或者通过exec()或eval()函数来执行。 参数: source:一个字符串或AST(抽象语法树)对象&am…...
websocket自动重连封装
websocket自动重连封装 前端代码封装 import { ref, onUnmounted } from vue;interface WebSocketOptions {url: string;protocols?: string | string[];reconnectTimeout?: number; }class WebSocketService {private ws: WebSocket | null null;private callbacks: { [k…...
解锁C/C++:链表数据结构的奇幻之旅
目录 一、引言二、链表基础概念2.1 链表是什么2.2 链表的类型三、C 语言实现链表3.1 定义链表节点3.2 创建链表3.3 链表操作3.3.1 遍历链表3.3.2 插入节点3.3.3 删除节点3.3.4 查找节点3.4 完整示例代码四、C++ 实现链表4.1 定义链表节点类4.2 创建链表4.3 链表操作4.3.1 遍历链…...
x64、aarch64、arm与RISC-V64:详解四种处理器架构
x64、aarch64、arm与RISC-V64:详解四种处理器架构 x64架构aarch64架构ARM架构RISC-V64架构总结与展望在计算机科学领域,处理器架构是构建计算机系统的基石,它决定了计算机如何执行指令、管理内存和处理数据。x64、aarch64、arm与RISC-V64是当前主流的四种处理器架构,它们在…...
nuxt3中报错: `setInterval` should not be used on the server.
那是因为在后端渲染没有浏览器的执行环境,一些浏览器环境提供的对象和方法都无法使用,代码判断下就行。 if (import.meta.client) {setInterval(() > {}, 1000) }Import meta Nuxt API...
python编程-集合内置函数和filter(),集合常见操作
在Python中,列表、集合、字典是三种常用的数据结构,它们各自拥有一些内置函数,用于执行各种操作。 一、列表的常用内置函数 #1、append(obj): 在列表末尾添加新的对象。list_a [1, 2, 3] list_a.append(4) print(list_a) # 输出: [1,…...
三极管的截止、放大、饱和区
三极管的几个区,都有什么用: 截止区:晶体管不导通,用于开关电路的“关”状态。 放大区:晶体管用于信号放大,集电极电流与基极电流成正比。 饱和区:晶体管完全导通,用于开关电路的“…...
python爬虫--简单登录
1,使用flask框架搭建一个简易网站 后端代码app.py from flask import Flask, render_template, request, redirect, url_for, sessionapp Flask(__name__) app.secret_key 123456789 # 用于加密会话数据# 模拟用户数据库 users {user1: {password: password1}…...
苹果公司宣布正式开源 Xcode 引擎 Swift Build145
2025 年 2 月 1 日,苹果公司宣布正式开源 Xcode 引擎 Swift Build145。 Swift 是苹果公司于 2014 年推出的一种开源编程语言,用于开发 iOS、iPadOS、macOS、watchOS 和 tvOS 等平台的应用程序。 发展历程 诞生:2014 年,苹果在全球…...
齿轮减速机和平行轴减速机有何区别?
减速机是传动系统中重要的组成部分,常用的减速机有四大系列,分别是平行轴减速机、同轴减速机、直角减速机和齿轮减速机。那么大家知道齿轮减速机和平行轴减速机投什么区别吗? 齿轮减速机的轴不一定是平行的,还可能存在相交轴或交错…...
基于Hexo实现一个静态的博客网站
原文首发:https://blog.liuzijian.com/post/8iu7g5e3r6y.html 目录 引言1.初始化Hexo2.整合主题Fluid3.部署评论系统Waline4.采用Nginx部署 引言 Hexo是中国台湾开发者Charlie在2012年创建的一个开源项目,旨在提供一个简单、快速且易于扩展的静态博客生…...
MIT6.824 Lecture 1-Introduction
balance:性能和容错 Faulty tolerance: Availablity、Recoverability、NV storage(非易失性存储,比较贵)、Replication(多个数据副本) consistency: Put(key,…...
【Redis实战】投票功能
1. 前言 现在就来实践一下如何使用 Redis 来解决实际问题,市面上很多网站都提供了投票功能,比如 Stack OverFlow 以及 Reddit 网站都提供了根据文章的发布时间以及投票数计算出一个评分,然后根据这个评分进行文章的展示顺序。本文就简单演示…...
1Panel应用推荐:WordPress开源博客软件和内容管理系统
1Panel(github.com/1Panel-dev/1Panel)是一款现代化、开源的Linux服务器运维管理面板,它致力于通过开源的方式,帮助用户简化建站与运维管理流程。为了方便广大用户快捷安装部署相关软件应用,1Panel特别开通应用商店&am…...
GGML、GGUF、GPTQ 都是啥?
GGML、GGUF和GPTQ是三种与大型语言模型(LLM)量化和优化相关的技术和格式。它们各自有不同的特点和应用场景,下面将详细解释: 1. GGML(GPT-Generated Model Language) 定义:GGML是一种专为机器学习设计的张量库,由Georgi Gerganov创建。它最初的目标是通过单一文件格式…...
MySQL主从复制原理及工作过程
一、主从复制原理 1、MySQL将数据变化记录到二进制日志中; 2、Slave将MySQL的二进制日志拷贝到Slave的中继日志中; 3、Slave将中继日志中的事件在做一次,将数据变化,反应到自身(Slave)的数据库 详细步骤&…...
Unity VideoPlayer播放视屏不清晰的一种情况
VideoPlayer的Rnder Texture可以设置Size,如果你的视屏是1920*1080那么就设置成1920*1080。 如果设置成其他分辨率比如800*600会导致视屏不清晰。...
发布:大彩科技DN系列2.8寸高性价比串口屏发布!
一、产品介绍 该产品是一款2.8寸的工业组态串口屏,采用2.8寸液晶屏,分辨率为240*320,支持电阻触摸、电容触摸、无触摸。可播放动画,带蜂鸣器,默认为RS232通讯电平,用户短接屏幕PCB上J5短接点即可切换为TTL电…...
Oh3.2项目升级到Oh5.0(鸿蒙Next)具体踩坑记录(一)
目录 1.自动修复部分 Cause: The project structure and configuration require an upgrade. Solution: 1. Use Migrate Assistant to auto-upgrade the project structure and configuration. 2. Manually upgrade the project structure and configuration by following th…...
pytest+request+yaml+allure 接口自动化测试全解析[手动写的跟AI的对比]
我手动写的:Python3:pytest+request+yaml+allure接口自动化测试_request+pytest+yaml-CSDN博客 AI写的:pytest+request+yaml+allure 接口自动化测试全解析 在当今的软件开发流程中,接口自动化测试扮演着至关重要的角色。它不仅能够提高测试效率,确保接口的稳定性和正确性…...
Redis存储⑤Redis五大数据类型之 List 和 Set。
目录 1. List 列表 1.1 List 列表常见命令 1.2 阻塞版本命令 1.3 List命令总结和内部编码 1.4 List典型使用场景 1.4.1 消息队列 1.4.2 分频道的消息队列 1.4.3 微博 Timeline 2. Set 集合 2.1 Set 集合常见命令 2.2 Set 集合间命令 2.3 Set命令小结和内部编码 2.…...
使用PyCharm进行Django项目开发环境搭建
如果在PyCharm中创建Django项目 1. 打开PyCharm,选择新建项目 2.左侧选择Django,并设置项目名称 3.查看项目解释器初始配置 4.新建应用程序 执行以下操作之一: 转到工具| 运行manage.py任务或按CtrlAltR 在打开的manage.pystartapp控制台…...
C# 综合运用介绍
.NET学习资料 .NET学习资料 .NET学习资料 C# 作为一种由微软开发的面向对象编程语言,在软件开发领域占据着重要地位。凭借其简洁、类型安全以及与.NET 框架的紧密结合等特性,C# 被广泛应用于多个领域。下面将详细介绍 C# 的综合运用。 一、C# 语言特性…...
Docker 和 Docker Compose
Docker 和 Docker Compose 是两个相关但用途不同的工具,它们在容器化应用的管理和部署中扮演不同的角色。以下是它们的核心区别: 1. 功能定位 Docker: 是一个容器化平台,用于创建、运行和管理单个容器。适用于单个容器应用的开发和测试。通过…...
文件上传到腾讯云存储、签名及设置过期时间
将文件上传到腾讯云对象存储(COS,Cloud Object Storage)可以通过腾讯云提供的 SDK 实现。以下是详细的步骤和示例代码,帮助您完成文件上传操作。 步骤 注册腾讯云账号并创建存储桶: (1)登录腾讯…...
从0开始达芬奇(6)
软件交互 就是与PR,AE软件进行交互。(这个就不多说啦) 快捷键(以下是TIM总结的常用快捷键)...
如何在Windows上使用Docker
引言 WSL2(Windows Subsystem for Linux2)是微软开发的一种技术,允许在 Windows 操作系统上运行 Linux 环境。它提供了一个兼容层,使得用户可以在 Windows 系统中直接运行 Linux 命令行工具、应用程序和开发工具,而无需…...
细胞计数专题 | 如何减少台盼蓝沉淀?
台盼蓝(Trypan Blue)是一种在生物学研究中广泛使用的染料,尤其常用于细胞活力检测。当细胞死亡时,其细胞膜会变得对台盼蓝具有通透性,染料因而能够进入细胞并与细胞内的蛋白质结合,产生染色效果。由此&…...
go流程控制
流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的“经脉”。 Go 语言中最常用的流程控制有 if 和 for,而 switch 和 goto 主要是为了简化代码、降低重复代码而生的结构,属于扩展类的流程控制。 if else…...
Spring Web MVC项目的创建及使用
一、什么是Spring Web MVC? Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中,通常被称为Spring MVC。 1.1 MVC的定义 MVC 是 Model View Controller 的缩写,它是软件工程中的一种软件架构…...
RabbitMQ 从入门到精通:从工作模式到集群部署实战(四)
#作者:闫乾苓 系列前几篇: 《RabbitMQ 从入门到精通:从工作模式到集群部署实战(一)》:link 《RabbitMQ 从入门到精通:从工作模式到集群部署实战(二)》: lin…...
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_get_options函数
声明 就在 main函数所在的 nginx.c 中: static ngx_int_t ngx_get_options(int argc, char *const *argv); 实现 static ngx_int_t ngx_get_options(int argc, char *const *argv) {u_char *p;ngx_int_t i;for (i 1; i < argc; i) {p (u_char *) argv[i]…...
TCP长连接、HTTP短轮询、HTTP长轮询、HTTP长连接、WebSocket的区别
1.TCP长连接 (1)概念:该连接属于传输层的协议。客户端和服务器之间建立连接后,不立即断开该连接,而是一直保持这个状态,以便后续数据的持续、连续传输。(2)应用场景:适合…...
在 Flownex 中创建自定义工作液
在这篇博文中,我们将了解如何在 Flownex 中为流网添加和定义一种新的流体温度相关工作材料。 Flownex 物料管理界面 在 Flownex 中使用与温度相关的流体材料时,了解其特性与温度的关系非常重要。这种了解可确保准确预测各种热条件下的流体行为࿰…...
基于Spring Boot的图书个性化推荐系统的设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
【抽象代数】1.1. 运算及关系
集合与映射 定义1. 设 为 的子集,定义 到 的映射 : 使得 ,称 为 到 的嵌入映射。 定义2. 设 为 的子集, 为 到 的映射, 为 到 的映射,如果 ,称为的开拓, 为 的限制&…...
拥抱开源,助力创新:IBM永久免费云服务器助力开源项目腾飞
近年来,开源项目蓬勃发展,为全球科技进步做出了巨大贡献。然而,服务器成本高昂常常成为开源项目的巨大障碍。许多优秀的项目因缺乏资源而难以持续发展,甚至夭折。令人振奋的是,IBM云计算平台推出了一项重磅活动&#x…...
Windows Docker笔记-简介摘录
Docker是一个开源的容器化平台,可以帮助开发人员将应用程序与其依赖项打包在一个独立的容器中,然后在任何安装的Docker的环境中快速、可靠地运行。 几个基本概念和优势: 1. 容器 容器是一个轻量级、独立的运行环境,包含了应用程…...
threejs 建筑设计(室内设计)软件 技术调研之五 墙体生成后自动生成房间(地面)
运用threejs 开发 建筑设计(室内设计)软件 技术调研 四 墙体添加真实门窗并保持原材质 在线体验地址:http://47.96.130.245:8080/design/index.html 实现功能: 墙体材质变换后,自动根据墙体的顶点生成相应的房间 视…...
C++:string类的模拟实现
目录 1.引言 2.C模拟实现 2.1模拟实现构造函数 1)直接构造 2)拷贝构造 2.2模拟实现析构函数 2.3模拟实现其他常规函数 1)c_str函数 2)size函数 3)begin/end函数 4)reserve函数 5)re…...
UE制作2d游戏
2d免费资产: Free 2D Game Assets - CraftPix.net 需要用到PaperZD插件 官网下载后启用即可 导入png素材 然后全选 - 创建Sprite 创建 人物基类 设置弹簧臂和相机 弹簧臂设置成旋转-90 , 取消碰撞测试 设置子类Sprite 拖到场景中 绑定设置输入映射,让角色移动跳跃 神似卡拉比…...
verilog练习:i2c slave 模块设计
文章目录 前言1. 结构2.代码2.1 iic_slave.v2.2 sync.v2.3 wr_fsm.v2.3.1 状态机状态解释 2.4 ram.v 3. 波形展示4. 建议5. 资料总结 前言 首先就不啰嗦iic协议了,网上有不少资料都是叙述此协议的。 下面将是我本次设计的一些局部设计汇总,如果对读者有…...
mysql的语句备份详解
使用mysqldump工具备份(适用于逻辑备份) mysqldump是 MySQL 自带的一个非常实用的逻辑备份工具,它可以将数据库中的数据和结构以 SQL 语句的形式导出到文件中。 1. 备份整个数据库 mysqldump -u [用户名] -p [数据库名] > [备份文件名].…...
BFS算法篇——广度优先搜索,探索未知的旅程(上)
文章目录 前言一、BFS的思路二、BFS的C语言实现1. 图的表示2. BFS的实现 三、代码解析四、输出结果五、总结 前言 广度优先搜索(BFS)是一种广泛应用于图论中的算法,常用于寻找最短路径、图的遍历等问题。与深度优先搜索(DFS&…...
短剧APP开发:短剧风口下的机遇
今年春节以来,各种精品短剧不断上线,短剧赛道热度持续上升,展现出了强大的经济效益,为影视市场提供了越来越多的机会。短剧的持续火爆也带动了短剧APP的发展,“短剧”迎来了爆发式增长,本文将探讨短剧APP开…...