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

GPT系列文章

GPT系列文章

GPT1

GPT1是由OpenAI公司发表在2018年要早于我们之前介绍的所熟知的BERT系列文章。总结:GPT 是一种半监督学习,采用两阶段任务模型,通过使用无监督的 Pre-training 和有监督的 Fine-tuning 来实现强大的自然语言理解。在 Pre-training 中采用了 12 层的修改过的 Transformer Decoder 结构,在 Fine-tuning 中会根据不同任务提出不同的分微调方式,从而达到适配各类 NLP 任务的目的

Improving Language Understanding by Generative Pre-Training
使用通用的预训练来提高语言的理解能力
发表时间:2018年

这篇文献的主要贡献是提出了一种基于生成式预训练的语言理解模型,该模型可以在各种自然语言处理任务上取得显著的性能提升。

在当时的NLP领域,与计算机视觉相比,缺乏大量的标注数据集。然而,无标注的文本语料库却非常丰富。因此,作者首先在大量的非标注语料库中进行生成式预训练(Generative Pre-Training),然后针对每个特定的任务进行区分性微调(Discriminative Fine-Tuning)。这种方法使得模型能够在不同的NLP任务上取得很好的表现。

这里可以说和BERT一样将CV领域成熟的迁移学习的技术引入到了NLP领域中

采用了半监督(Semi-Supervised)的训练方式,即通过无监督学习进行预训练,再通过监督学习进行微调。在评估了RNN网络和transformer网络之后,作者发现后者可以很好地捕捉较长的语言结构,从而使得模型在处理子任务时具有更好的泛化性。这种方法为模型的训练带来了很好的效果。

对于GPT1系列的文章我们主要介绍的就是GPT1系列的一个训练过程并展示一下对应的实验结果和数据。

无监督学习下的预训练(Pre-Training)

通过输入文本片段:

U = { u 1 , … , u n } \mathcal{U}=\left\{u_{1}, \ldots, u_{n}\right\} U={u1,,un}
其中u1可以表示为单个字符,U可以表示为一个包含许多字符的字符串,根据前k个词来预测下一个词ui的概率:

P ( u i ∣ u i − k , … , u i − 1 ) P\left(u_{i} \mid u_{i-k}, \ldots, u_{i-1}\right) P(uiuik,,ui1)

然后最大化似然函数来进行训练。目标函数如下所示:

P ( u i , u i − 1 , … , u 1 ) = P ( u 1 ) ⋅ P ( u 2 ∣ u 1 ) ⋅ P ( u 3 ∣ u 2 , u 1 ) ⋯ P ( u i ∣ u i − 1 , … , u 1 ) P\left(u_{i}, u_{i-1}, \ldots, u_{1}\right)=P\left(u_{1}\right) \cdot P\left(u_{2} \mid u_{1}\right) \cdot P\left(u_{3} \mid u_{2}, u_{1}\right) \cdots P\left(u_{i} \mid u_{i-1}, \ldots, u_{1}\right) P(ui,ui1,,u1)=P(u1)P(u2u1)P(u3u2,u1)P(uiui1,,u1)

L 1 ( U ) = ∑ i = k + 1 n log ⁡ P ( u i ∣ u i − k , … , u i − 1 ; Θ ) L_{1}(\mathcal{U})=\sum_{i=k+1}^{n} \log P\left(u_{i} \mid u_{i-k}, \ldots, u_{i-1} ; \Theta\right) L1(U)=i=k+1nlogP(uiuik,,ui1;Θ)

其中k表示给定k个词的情况下,通过模型Θ预测出ui​的概率,并将所有出现的词的概率取对数相加作为文本出现的联合概率。预训练的目标即为优化该L1​目标函数。

此外,模型仅使用了Transforme的解码器(Decoder)进行预训练

预测过程涉及将n个词进行词嵌入(Word Embedding),然后加上位置嵌入(Position Embedding)。接下来,文本序列通过多层 Transformer 块进行处理,并在最后一层 Transformer 块后进行最后一次投影。最后,经由 Softmax 操作,输出文本中每个词的概率分布。

其中U是tokens的上下文向量,n是层数,We 是词嵌入矩阵token embedding matrix,Wp 是position embedding matrix位置编码矩阵。

h 0 = U W e + W p h l = transformer_block ⁡ ( h l − 1 ) ∀ i ∈ [ 1 , n ] P ( u ) = softmax ⁡ ( h n W e T ) \begin{aligned} h_{0} & =U W_{e}+W_{p} \\ h_{l} & =\operatorname{transformer\_ block}\left(h_{l-1}\right) \forall i \in[1, n] \\ P(u) & =\operatorname{softmax}\left(h_{n} W_{e}^{T}\right) \end{aligned} h0hlP(u)=UWe+Wp=transformer_block(hl1)i[1,n]=softmax(hnWeT)

在这里插入图片描述

GPT预训练模型仅仅只采用transformer的解码器(decoder),是源于解码器中的第一层多头注意力(Multi-Head Attention)采用了掩码(Masked)的操作。论文中采用该方法,将k作为上下文窗口,涂抹掉信息来预测下一个词。这种掩码操作被称为自回归性质,它可以确保模型在生成序列时遵循语言的线性顺序,而不会出现随意跳跃或重复生成的情况。

监督学习下的微调(fine-tuning)

在进行大量无标注的文本语料库训练后,模型还需要在某些特定的目标任务下进行微调。给定文本

x 1 , … , x m x^{1}, \ldots, x^{m} x1,,xm

和相应的标注信息y,将它们输入到预训练模型中进行微调。在微调过程中,hlm表示最后一层Transformer块的输出,Wy表示最后一层输出层的参数。

P ( y ∣ x 1 , … , x m ) = softmax ⁡ ( h l m W y ) . P\left(y \mid x^{1}, \ldots, x^{m}\right)=\operatorname{softmax}\left(h_{l}^{m} W_{y}\right) . P(yx1,,xm)=softmax(hlmWy).

L 2 ( C ) = ∑ ( x , y ) log ⁡ P ( y ∣ x 1 , … , x m ) L_{2}(\mathcal{C})=\sum_{(x, y)} \log P\left(y \mid x^{1}, \ldots, x^{m}\right) L2(C)=(x,y)logP(yx1,,xm)

另外,将预训练好的语言模型作为辅助目标进行 Fine-tuning 不仅可以使监督模型更具泛化性,还可以加速收敛。于是我们有了最终的损失函数的形式:

L 3 ( C ) = L 2 ( C ) + λ ∗ L 1 ( C ) L_{3}(\mathcal{C})=L_{2}(\mathcal{C})+\lambda * L_{1}(\mathcal{C}) L3(C)=L2(C)+λL1(C)

模型结构图与举例

图 1:(左)本工作中使用的 Transformer 架构。 (右)用于对不同任务进行微调的输入转换。 我们将所有结构化输入转换为令牌序列,以便由我们的预训练模型进行处理,然后是线性+softmax层。

在这里插入图片描述

这里的堆叠12层的解码器结构,就和BERT中的基本模型这里的堆叠12次解码器的结构相互对应起来了。

通过添加的线性层(Linear),也是上文说的Wy参数,进行下游的任务的时候不修改transformer的结构来进行微调的实现。

  • 分类 (Classification):输入开始符(Start),文本(Text),抽取符(Extract),线性层即输出分类数。
  • 包含(Entailment):输入开始符(Start),文本(Text),分隔符(Delim),假设(Hypothesis),抽取符(Extract),线性层输出类似包含,不包含,无关三分类。
  • 相似(Similarity):输入开始符(Start),文本(Text 1),分隔符(Delim),文本(Text 2),抽取符(Extract);输入开始符(Start),文本(Text2),分隔符(Delim),文本(Text1),抽取符(Extract)。经过相加后进入线性层,输出两端文本在不同语境下是否相似的。
  • 多选(Multiple Choice):输入开始符(Start),文本(Context),分隔符(Delim),答案(Answer 1),抽取符(Extract);输入开始符(Start),文本(Context),分隔符(Delim),答案(Answer N),抽取符(Extract);每个输入都经过一个线性层而后通过softmax操作求出每个答案的置信度。

实验部分细节

最后实验是在包含7000篇没有发表的书籍上进行训练,使用12层的transformer解码器,每一层包含768维的网络进行训练,使用了3072维数的FFN(Position-wise Feed-Forward Network)层,使用了Adam优化器和GELU激活函数。

以上就是对现在大火的GPT模型最早的一个版本的简单的概述。

GPT2

在BERT模型发布并且开源之后,其在NLP上的性能已经超过了GPT1之后的GPT2这一篇文章就是对GPT1模型的一个改进。

Language Models are Unsupervised Multitask Learners
语言模型是无监督的多任务学习器
使用更大的数据集和更大的模型来去打败之前的BERT

研究背景

  1. 单任务,单领域任务的流行造成当前的机器学习系统缺乏泛化能力。而多任务学习是一个提升通用能力的很有前途的一个框架。但NLP中的多任务学习仍处于起步阶段,另一方面,当前的预训练和无监督微调的方式很流行,但仍需要监督训练。
  2. 证明语言模型可以在zero-shot setting下,不需要任何参数或架构修改执行下游任务,并取得相当不错的效果

首先摘要中讲到他们的语言模型在一个包含数百万网页的WebText数据集上没有任何显式监督的情况下进行学习。

GPT-2模型是一个有1.5B(15亿)参数的Transformer,在zero-shot setting下,在8个任务中的7个任务上都取得的sota。

GPT2论文中所提出的一个核心的观点就是基于zero-shot的一个推理过程。多任务学习与我们常规理解的有监督学习中的多任务不太一样,这里主要是指模型从大规模数据中学到的能力能够直接在多个任务之间进行迁移,而不需要额外提供特定任务的数据,因此引出了 GPT-2 的主要观点:zero-shot。

这里也就是说:不论是 GPT-1 还是 BERT,NLP 任务中比较主流的 pre-train + fine-tuning 始终还是需要一定量的下游任务有监督数据去进行额外的训练,在模型层面也需要额外的模块去进行预测,仍然存在较多人工干预的成本。GPT-2 想彻底解决这个问题,通过 zero-shot,在迁移到其他任务上的时候不需要额外的标注数据,也不需要额外的模型训练。

模型结构

GPT2和GPT1在模型结构上基本上是相同的,这里只对改进的地方进行一下简单的概述。

在模型结构方面,整个 GPT-2 的模型框架与 GPT-1 相同,只是做了几个地方的调整,这些调整更多的是被当作训练时的 trick,而不作为 GPT-2 的创新,具体为以下几点:

  1. 后置层归一化( post-norm )改为前置层归一化( pre-norm )

在这里插入图片描述
GPT-2 进行上述模型调整的主要原因在于,随着模型层数不断增加,梯度消失和梯度爆炸的风险越来越大,这些调整能够减少预训练过程中各层之间的方差变化,使梯度更加稳定。

  1. 在模型最后一个自注意力层之后,额外增加一个层归一化;

  2. 输入序列的最大长度从 512 扩充到 1024;

在这里插入图片描述

之前的GPT1和BERT在做具体的微调的时候,或加入一些额外的开始符,结束符和分隔符等一些符号。这里要做基于zero-shot的推理的话就不能在存在这个了。

模型训练

GPT-2采用了一阶段的模型(预训练)代替了二阶段的模型(预训练+ Fine tuning)。在预训练阶段,GPT-2采用了多任务的方式进行学习,每一个任务都要保证其损失函数能收敛。不同的任务共享主干的Transformer参数,这样能进一步提升模型的泛化能力,因此在即使没有Fine-turning的情况下依旧有非常不错的表现。

模型参数大小对比:最大的GPT模型约1.17亿参数(117M);最大的BERT约3.4亿参数(340M),最大的GPT-2约15亿参数(1542M)

在训练数据方面,为了保证 zero-shot 的效果,必须要足够大且覆盖面广。所以 GPT-2 专门爬取了大量的网络文本数据,最后得到的数据集叫 WebText。它选取了 Reddit 上的高质量帖子,最终得到 4500w 网页链接,800w 有效的文本文档,语料大小为 40G。

在实验效果上,由于 GPT-2 主要是做 zero-shot,所以在实验部分,很多的实验对比都是在无监督的设定下进行的,也就是说他对比的都是无监督的算法。

从上述效果可以看到,GPT-2 在较多任务上对比无监督算法取得了一定的提升,证明了 zero-shot 的能力。但是,在很多任务上与有监督微调的方法相比还是有一些差距的,这可能也是 GPT-2 在当时影响力没有那么大的一个原因

在这里插入图片描述

但是通过这个趋势可以看出随着模型参数量和规模的增大,这些翻译,总结和回答问题任务中所表现出来的性能是不断线性的上升的这就为我们的GPT3的推出打下了一个基础。

GPT3

整体来看,GPT-3 相比于 GPT-2 有如下几点区别:(大力出奇迹的过程

  1. 效果上,超出 GPT-2 非常多,能生成人类难以区分的新闻文章;
  2. 主推 few-shot,相比于 GPT-2 的 zero-shot,具有很强的创新性;
  3. 模型结构略微变化,采用 sparse attention 模块;
  4. 海量训练语料 45TB(清洗后 570GB),相比于 GPT-2 的 40GB;
  5. 海量模型参数,最大模型为 1750 亿,GPT-2 最大为 15 亿参数;

Language Models are Few-Shot Learners
GPT3又重新回到了不在追求极致的zero-shot的推理而是对不同的任务使用少量的训练的样本

总结:不管是GPT或者GPT-2,下游任务都需要大量的样本。这不符合人类的习惯,人类只需要少量的示例甚至只需要说明就适应一个全新的NLP下游任务。而GPT-3追求的就是人类这种无缝融合和切换多个任务的能力。GPT-3证明了通过增大参数量就能让语言模型提高下游任务在Few-Shot设置下的性能

GPT-3证明了通过增大参数量就能让语言模型提高下游任务在Few-Shot设置下的性能。

研究背景

虽然 GPT-2 主推的 zero-shot 在创新度上有比较高的水平,但是由于其在效果上表现平平,所以在业界并没有取得比较大的影响力,而 GPT-3 正是为了解决效果上的问题而提出的。GPT-3 不再去追求那种极致的不需要任何样本就可以表现很好的模型,而是考虑像人类的学习方式那样,仅仅使用极少数样本就可以掌握某一个任务

1750亿参数、数据集45TB,训练花了3640pfs-day,训练一次的费用保守估计是460万美元,总训练成本估计达到了1200 万美元。暴力出奇迹。此时微软已经投资OpenAI(2019年投了10亿美元),微软也在2020年9月22日宣布取得了GPT-3的独家授权。

下游任务评估方法

在这里插入图片描述

  • One-shot Learning:

    • 定义:在一次学习中,模型在训练阶段只看到一个样本的情况下,需要在推理阶段识别出新的样本。
    • 特点:模型需要极高的泛化能力,能够从单一样本中快速学习并识别出同一类别的新样本。
  • Few-shot Learning:

    • 定义:在少样本学习中,模型在训练阶段只看到很少数量的样本(通常几个到几十个),然后在推理阶段识别出同一类别的新样本。
    • 特点:相比于传统的机器学习任务,少样本学习更接近于人类学习的方式,即通过少量样本快速学习新概念。

在这里插入图片描述

Zero-shot表示仅需给出任务描述,One-shot表示仅需给出任务描述和一个例子,Few-shot表示仅需给出任务描述和少量的例子,这三种方式都不再需要进行参数更新,仅需要把少量标注样本作为输入文本的上下文,GPT-3即可输出答案。

模型结构的改进

在模型结构上,GPT-3 延续使用 GPT 模型结构,但是引入了 Sparse Transformer 中的 sparse attention 模块(稀疏注意力)。

sparse attention 与传统 self-attention(称为 dense attention) 的区别在于:

  • dense attention:每个 token 之间两两计算 attention,复杂度 O(n²)
  • sparse attention:每个 token 只与其他 token 的一个子集计算 attention,复杂度 O(n*logn)

在这里插入图片描述

训练数据

训练数据:由于 GPT-3 在模型规模上的扩大,在训练数据方面也必须进行扩充来适配更大的模型使其发挥出相应的能力。

GPT-3 使用了多个数据集,其中最大的是 Common Crawl,原始未处理的数据达到了 45TB,其实在 GPT-2 的时候他们就有考虑使用这个数据集,但是后来还是觉得这个数据集太脏了所以没用,但是现在 GPT-3 的模型规模太大了,使得训练对数据量的需求也增加了很多,他们不得不重新考虑这个数据集。因此,他们必须在这个数据集上做一些额外的数据清洗工作来尽量保证数据的质量。

在这里插入图片描述

GPT4展望

GPT4作为现在最先进的一个大模型之一,已经不是单纯的一个语言模型了而是一个多模态的模型,可以处理图文数据并产生图片和视频。

应用包括了许多:微软公布了GPT加持的Copilot

相关文章:

GPT系列文章

GPT系列文章 GPT1 GPT1是由OpenAI公司发表在2018年要早于我们之前介绍的所熟知的BERT系列文章。总结:GPT 是一种半监督学习,采用两阶段任务模型,通过使用无监督的 Pre-training 和有监督的 Fine-tuning 来实现强大的自然语言理解。在 Pre-t…...

微软Ignite 2024:建立一个Agentic世界!

在今年的Microsoft Ignite 2024上,AI Agent无疑成为本次大会的重点,已经有十万家企业通过Copilot Studio创建智能体了。微软更是宣布:企业可以在智能体中,使用Azure目录中1800个LLM中的任何一个模型了! 建立一个Agent…...

windows C#-属性

属性提供了一种将元数据或声明性信息与代码(程序集、类型、方法、属性等)关联的强大方法。将属性与程序实体关联后,可以使用称为反射的技术在运行时查询该属性。 属性具有以下属性: 属性将元数据添加到您的程序中。元数据是有关程序中定义的类型的信息…...

深入浅出:JVM 的架构与运行机制

一、什么是JVM 1、什么是JDK、JRE、JVM JDK是 Java语言的软件开发工具包,也是整个java开发的核心,它包含了JRE和开发工具包JRE,Java运行环境,包含了JVM和Java的核心类库(Java API)JVM,Java虚拟…...

如何在 Eclipse 中调试ABAP程序

原文链接:Debugging an ABAP Program ADT 中的调试器是一个重要的诊断工具,可用于分析 ABAP 应用程序。 使用调试器,您可以通过在运行时 Debug 单步执行(F5)程序来确定程序无法正常工作的原因。这使您可以看到正在执…...

websocket是什么?

一、定义 Websocket是一种在单个TCP连接上进行全双工通信的协议,它允许服务器主动向客户端推送数据,而不需要客户端不断的轮询服务器来获取数据 与http协议不同,http是一种无状态的,请求,响应模式的协议(单向通信)&a…...

Java项目实战II基于微信小程序的图书馆自习室座位预约平台(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 在知识爆炸的时代,图书馆和…...

5.算法移植第六篇YOLOV5 /onnx模型转换成rknn

上两篇文章讲述了pytorch模型下best.pt转换成onnx模型,以及将onnx进行简化成为best-sim.onnx, 接下来这篇文章讲述如何将onnx模型转换成rknn模型,转换成该模型是为了在rk3568上运行 1.创建share文件夹 文件夹包含以下文件best-sim.onnx,rknn-tookit2-…...

微知-DOCA SDK中如何编译一个sample?如何运行?(meson /tmp/xxx; meson compile -C /tmp/xxx)

文章目录 快速回忆背景前期准备DOCA SDK中的例子情况编译编译request编译responser 执行测试启动响应端启动请求端查看响应端 综述参考 快速回忆 # 生成编译目录和相关文件 cd /opt/mellanox/doca/samples/doca_rdma/rdma_write_requester meson /tmp/req #将编译目录指定到/t…...

【Leetcode 每日一题】146. LRU 缓存(c++)

146. LRU 缓存 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值&#x…...

【机器学习】近似分布的熵到底是p(x)lnq(x)还是q(x)lnq(x)?

【1】通信的定义 信息量(Information Content)是信息论中的一个核心概念,用于定量描述一个事件发生时所提供的“信息”的多少。它通常用随机变量 𝑥的概率分布来定义。事件 𝑥发生所携带的信息量由公式给出&#xff1…...

网络安全,文明上网(6)网安相关法律

列举 1. 《中华人民共和国网络安全法》: - 这是中国网络安全的基本法律,于2017年6月1日开始实施。该法律明确了网络运营者的安全保护义务,包括采取数据分类、重要数据备份和加密等措施。 2. 《中华人民共和国数据安全法》: …...

网络安全学习74天(记录)

11.21日,今天学习了 app抓包(需要的工具charles(激活),夜神模拟器,postern,) 思路:首先charles需要抓取的app的包,需要的是装证书,将charles的证…...

Spring Boot 实战:基于 Validation 注解实现分层数据校验与校验异常拦截器统一返回处理

1. 概述 本文介绍了在spring boot框架下,使用validation数据校验注解,针对不同请求链接的前端传参数据,进行分层视图对象的校验,并通过配置全局异常处理器捕获传参校验失败异常,自动返回校验出错的异常数据。 2. 依赖…...

20241125复盘日记

昨日最票: 南京化纤 滨海能源 广博股份 日播时尚 众源新材 返利科技 六国化工 丰华股份 威领股份 凯撒旅业 华扬联众 泰坦股份 高乐股份高均线选股: 理邦仪器高乐股份日播时尚领湃科技威领股份资金最多的票: 资金攻击最多的票: …...

【Excel】拆分多个sheet,为单一表格

Private Sub 分拆工作表() Application.ScreenUpdating True 让屏幕显示操作过程, Dim sht As Worksheet Dim MyBook As Workbook Set MyBook ActiveWorkbook For Each sht In MyBook.Sheets If sht.Visible True Then 隐藏的sheet跳过,否则会报1004无…...

类和对象plus版

一.类的定义 1.1类定义的格式 图中class为关键字,Stack为类的名字,用{}框住类的主体,类定义完后;不能省略。 为了区分成员变量,一般习惯在成员变量前面或后面加一个特殊标识,_或者m_ 1.2访问限定符 c采用…...

shell练习

开篇小贴士:为创建的sh(当然可以是任何一个文件)文件添加开头的注释 1、进入到家目录,然后通过 ls -a 查看全部文件 2、找到并编辑一个名为 .vimrc (Vim编辑器的核心配置文件)的配置文件,下图…...

ApiChain 从迭代到项目 接口调试到文档生成单元测试一体化工具

项目地址:ApiChain 项目主页 ApiChain 简介 ApiChain 是一款类似 PostMan 的接口网络请求与文档生成软件,与 PostMan 不同的是,它基于 项目和迭代两个视角管理我们的接口文档,前端和测试更关注版本迭代中发生变更的接口编写代码…...

Vercel 设置自动部署 GitHub 项目

Vercel 设置自动部署 GitHub 项目 问题背景 最近 Vercel 调整了其部署政策,免费版用户无法继续使用自动部署功能,除非升级到 Pro 计划。但是,我们可以通过配置 Deploy Hooks 来实现同样的自动部署效果。 解决方案 通过设置 Vercel 的 Dep…...

SQL进阶:如何跳过多个NULL值取第一个非NULL值?

NULL 一、问题描述二、ORACLE<一>、last_value () over ()<二>、lag () over()<三>、相关子查询 三、MYSQL<一>、全局变量<二>、coalesce() lag() over()<三>、相关子查询<四>、 recursive<五>、lag() over() min() over() …...

laravel 5.5 增加宏指令 joinSub, 省去->toSql() 和 addBinding($bindings);

laravel 5.5 增加宏指令 joinSub, 省去->toSql() 和 addBinding($bindings); 1. 在laravel5使用join 子查询时 $sub_query DB::table(table1)->select([table1.id, cate_id])->join(table2, table1.id, , table2.id)->where(table1.cate_id, 2)->orderBy(tabl…...

远程控制软件:探究云计算和人工智能的融合

在数字化时代&#xff0c;远程控制工具已成为我们工作与生活的重要部分。用户能够通过网络远程操作和管理另一台计算机&#xff0c;极大地提升了工作效率和便捷性。随着人工智能&#xff08;AI&#xff09;和云计算技术的飞速发展&#xff0c;远程控制工具也迎来了新的发展机遇…...

网络协议之DNS

一、DNS概述 域名系统&#xff08;Domain Name System&#xff0c;缩写&#xff1a;DNS&#xff09;是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库&#xff0c;能够使人更方便地访问互联网。DNS使用TCP和UDP端口53&#xff0c;通过递归查询请求的方式来…...

.net6 使用 FreeSpire.XLS 实现 excel 转 pdf - docker 部署

FreeSpire.XLS && Aspose.Cells包都可以实现。实现过程中发现如下问题&#xff1a; 本地测试通过&#xff0c; docker部署服务器后报错&#xff1a; The type initializer for Spire.Xls.Core.Spreadsheet.XlsPageSetupBase threw an exception. 由于缺少依赖&#xf…...

QML学习 —— 28、3种等待指示控件(附源码)

效果如下 说明 BusyIndicator应用于指示在加载内容或UI被阻止等待资源可用时的活动。BusyIndicator类似于一个不确定的ProgressBar。两者都可以用来指示背景活动。主要区别在于视觉效果,ProgressBar还可以显示具体的进度(当可以确定时)。由于视觉差异,繁忙指示器和不确定的…...

flutter 专题十一 Fair原理篇Fair逻辑动态化架构设计与实现

数据逻辑处理布局中的逻辑处理Flutter类型数据处理 一、数据逻辑处理 我们接触的每一个Flutter界面&#xff0c;大多由布局和逻辑相关的代码组成。如Flutter初始工程的Counting Demo的代码&#xff1a; class _MyHomePageState extends State<MyHomePage> {// 变量 in…...

利用开源图床的技巧与实践

随着互联网的普及&#xff0c;图片的使用变得越来越广泛。无论是个人博客、社交媒体还是企业网站&#xff0c;都离不开图片的呈现。而图床作为图片存储和管理的工具&#xff0c;可以帮助开发者和内容创作者高效地管理图片资源。本文将探讨如何利用开源图床&#xff0c;并提供相…...

C++数据结构与算法

C数据结构与算法 1.顺序表代码模版 C顺序表模版 #include <iostream> using namespace std; // 可以根据需要灵活变更类型 #define EleType intstruct SeqList {EleType* elements;int size;int capacity; };// Init a SeqList void InitList(SeqList* list, int capa…...

Paddle Inference部署推理(三)

三&#xff1a;Paddle Inference推理 导出模型 Paddle Inference支持使用飞桨静态图模型进行推理&#xff0c;您可以通过以下两种方式获取静态图模型&#xff1a; &#xff08;1&#xff09;飞桨框架导出推理模型 飞桨框架在训练模型过程中&#xff0c;会在本地存储最终训练…...