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

GPT1.0 和 GPT2.0 的联系与区别

随着自然语言处理技术的飞速发展,OpenAI 提出的 GPT 系列模型成为了生成式预训练模型的代表。作为 GPT 系列的两代代表,GPT-1 和 GPT-2 虽然在架构上有着继承关系,但在设计理念和性能上有显著的改进。本文将从模型架构、参数规模、训练数据和实际能力等方面分析 GPT-1 和 GPT-2 的联系与区别。


一、GPT-1 和 GPT-2 的基本联系

  1. 相同的核心架构:基于 Transformer 的解码器结构
    • GPT-1 和 GPT-2 都采用了 Transformer 架构中的解码器部分,取消了编码器部分。这种设计使得模型专注于自回归任务,即通过给定前文预测下一个词。
    • 两者均使用多头自注意力机制和前馈网络相结合的模块堆叠。
  2. 语言建模目标一致
    • 两代模型的训练目标都是无监督语言建模(Unsupervised Language Modeling),以最大化给定文本序列的似然概率为优化目标。
    • 使用左到右的单向生成方式,从序列的开头逐词预测,适用于语言生成任务。
  3. 位置嵌入(Positional Embedding)
    • 两代模型均使用了位置嵌入,将词汇嵌入(Token Embedding)与位置嵌入相加后作为 Transformer 的输入。
  4. 残差连接与 LayerNorm
    • 残差连接(Residual Connection)和层归一化(Layer Normalization)被广泛用于提升梯度流动和训练稳定性。

二、GPT-1 和 GPT-2 的主要区别

1. 模型规模

GPT-2 的显著改进在于模型规模的扩展:

  • GPT-1:只有一个版本,参数规模为 1.1 亿(110M),包含 12 层 Transformer 解码器,每层的隐藏状态维度为 768。
  • GPT-2:提供了多个版本,最大参数规模达到 15 亿(1.5B),包含 48 层 Transformer 解码器,每层的隐藏状态维度为 1600,注意力头数从 12 增加到 16。
2. 上下文窗口长度
  • GPT-1 的最大上下文长度为 512
  • GPT-2 扩展到了 1024,使得模型可以捕获更长的上下文依赖关系,提升了生成的连贯性和逻辑性。
3. 训练数据集
  • GPT-1:训练数据规模较小,主要来自书籍数据集(BooksCorpus)等,包含约 5GB 的文本。
  • GPT-2:大幅扩展训练数据,使用了一个名为 WebText 的数据集,包含约 40GB 的高质量互联网文本。WebText 通过过滤低质量内容(如广告和代码)优化了数据质量。
  • 这种数据规模和多样性的提升,让 GPT-2 的泛化能力远超 GPT-1。
4. LayerNorm 的位置
  • GPT-1 使用了前置 LayerNorm(Pre-Norm),即将 LayerNorm 放在子模块的输入部分。
  • GPT-2 改为后置 LayerNorm(Post-Norm),即将 LayerNorm 放在子模块的输出部分。后置 LayerNorm 改善了梯度流动问题,提升了模型的训练稳定性。
5. 语言生成能力
  • GPT-2 在语言生成的连贯性、上下文一致性和逻辑性方面大幅超越 GPT-1,尤其是在长文本生成时表现尤为突出。
  • GPT-2 具备更强的多任务能力,即使没有专门的微调,也能解决翻译、问答等多种任务(零样本和少样本学习)。
6. 训练优化
  • GPT-2 引入了更高效的优化技术,比如改进了学习率调度策略(线性学习率热身和余弦衰减)、更少的 Dropout 使用等。

三、GPT-1 和 GPT-2 的实际意义

1. GPT-1:验证 GPT 架构的有效性
  • GPT-1 是生成式预训练模型(Generative Pre-trained Transformer)的首次实践,验证了基于无监督预训练的 Transformer 架构在自然语言处理任务中的潜力。
  • 其提出了“预训练 + 微调”的通用框架,为后续模型的快速发展奠定了基础。
2. GPT-2:大规模模型的潜力
  • GPT-2 的成功揭示了“更大模型 + 更多数据”在提升自然语言处理能力上的重要性。
  • 它的强大能力表明,模型规模的扩大与数据质量的提升可以显著提高模型在语言生成和多任务学习中的表现。
3. 技术传播与影响
  • GPT-1 的问世将注意力吸引到生成式语言模型领域,而 GPT-2 的发布则推动了行业对大规模预训练模型的关注,直接影响了后续 GPT-3、ChatGPT 等更强大的模型发展。

四、总结

GPT-1 和 GPT-2 作为两代生成式预训练模型,既有紧密的联系,也展现出明显的区别:

特性GPT-1GPT-2
参数规模1.1 亿15 亿
Transformer 层数12 层48 层(大模型)
隐藏层维度7681600
上下文长度5121024
训练数据集5GB40GB
LayerNorm 位置前置后置
生成质量一般优秀

GPT-1 提供了理论框架,GPT-2 则通过更大的规模、更优的数据和更精细的优化将这种架构的潜力发挥到了极致。两者的进化过程体现了深度学习领域中“大规模预训练模型”的发展思路,也为后续 GPT 系列的发展铺平了道路。


五、参考代码(不完整,仅供理解)

import torch
import torch.nn as nn
import torch.optim as optimclass GPT1Layer(nn.Module):"""GPT-1 的 Transformer 子模块,使用前置 LayerNorm"""def __init__(self, embed_size, num_heads):super(GPT1Layer, self).__init__()self.ln = nn.LayerNorm(embed_size)self.attn = nn.MultiheadAttention(embed_size, num_heads)self.ffn = nn.Sequential(nn.Linear(embed_size, 4 * embed_size),nn.GELU(),nn.Linear(4 * embed_size, embed_size))def forward(self, x):# 前置 LayerNorm + 注意力x_norm = self.ln(x)attn_out, _ = self.attn(x_norm, x_norm, x_norm)x = x + attn_out  # 残差连接# 前置 LayerNorm + 前馈网络x_norm = self.ln(x)ffn_out = self.ffn(x_norm)x = x + ffn_out  # 残差连接return xclass GPT2Layer(nn.Module):"""GPT-2 的 Transformer 子模块,使用后置 LayerNorm"""def __init__(self, embed_size, num_heads):super(GPT2Layer, self).__init__()self.attn = nn.MultiheadAttention(embed_size, num_heads)self.ln1 = nn.LayerNorm(embed_size)self.ffn = nn.Sequential(nn.Linear(embed_size, 4 * embed_size),nn.GELU(),nn.Linear(4 * embed_size, embed_size))self.ln2 = nn.LayerNorm(embed_size)def forward(self, x):# 注意力 + 残差连接 + 后置 LayerNormattn_out, _ = self.attn(x, x, x)x = x + attn_outx = self.ln1(x)# 前馈网络 + 残差连接 + 后置 LayerNormffn_out = self.ffn(x)x = x + ffn_outx = self.ln2(x)return xclass GPT(nn.Module):"""通用 GPT 模型,允许指定 LayerNorm 逻辑"""def __init__(self, vocab_size, embed_size, num_heads, num_layers, max_len, layer_cls):super(GPT, self).__init__()self.embed = nn.Embedding(vocab_size, embed_size)self.pos_embed = nn.Embedding(max_len, embed_size)self.layers = nn.ModuleList([layer_cls(embed_size, num_heads) for _ in range(num_layers)])self.ln_f = nn.LayerNorm(embed_size)  # 用于 GPT-2 的全局 LayerNormself.fc = nn.Linear(embed_size, vocab_size)def forward(self, x):seq_len = x.size(1)pos = torch.arange(seq_len, device=x.device).unsqueeze(0)x = self.embed(x) + self.pos_embed(pos)for layer in self.layers:x = layer(x)x = self.ln_f(x)  # GPT-2 的全局 LayerNorm,GPT-1 可视情况移除return self.fc(x)# Hyperparameters for GPT-1 and GPT-2
gpt1_config = {'vocab_size': 30522,'embed_size': 768,'num_heads': 12,'num_layers': 12,'max_len': 512,'layer_cls': GPT1Layer
}gpt2_config = {'vocab_size': 50257,'embed_size': 1600,'num_heads': 25,'num_layers': 48,'max_len': 1024,'layer_cls': GPT2Layer
}# Initialize models
gpt1 = GPT(**gpt1_config)
gpt2 = GPT(**gpt2_config)# Loss function and optimizers
criterion = nn.CrossEntropyLoss()
optimizer1 = optim.Adam(gpt1.parameters(), lr=0.001)
optimizer2 = optim.Adam(gpt2.parameters(), lr=0.001)# Example input (batch_size, seq_len)
batch_size1, batch_size2 = 2, 2
input_ids1 = torch.randint(0, gpt1_config['vocab_size'], (batch_size1, gpt1_config['max_len']))
input_ids2 = torch.randint(0, gpt2_config['vocab_size'], (batch_size2, gpt2_config['max_len']))# Forward pass
outputs1 = gpt1(input_ids1)  # Output for GPT-1
outputs2 = gpt2(input_ids2)  # Output for GPT-2print(f"GPT-1 Output Shape: {outputs1.shape}")  # (batch_size, seq_len, vocab_size)
print(f"GPT-2 Output Shape: {outputs2.shape}")  # (batch_size, seq_len, vocab_size)def count_parameters(model):return sum(p.numel() for p in model.parameters() if p.requires_grad)def format_parameters(num_params):if num_params >= 1e9:return f"{num_params / 1e9:.2f}B"  # 转换为十亿单位并保留两位小数elif num_params >= 1e6:return f"{num_params / 1e6:.2f}M"  # 转换为百万单位并保留两位小数else:return f"{num_params}"# 计算并格式化参数数量
gpt1_params = count_parameters(gpt1)
gpt2_params = count_parameters(gpt2)print(f"GPT-1 Model Parameters: {format_parameters(gpt1_params)}")
print(f"GPT-2 Model Parameters: {format_parameters(gpt2_params)}")

在这里插入图片描述


参考

  • Improving Language Understanding by Generative Pre-Training (GPT-1)
  • Language Models are Unsupervised Multitask Learners (GPT-2)

相关文章:

GPT1.0 和 GPT2.0 的联系与区别

随着自然语言处理技术的飞速发展,OpenAI 提出的 GPT 系列模型成为了生成式预训练模型的代表。作为 GPT 系列的两代代表,GPT-1 和 GPT-2 虽然在架构上有着继承关系,但在设计理念和性能上有显著的改进。本文将从模型架构、参数规模、训练数据和…...

在 Taro 中实现系统主题适配:亮/暗模式

目录 背景实现方案方案一:CSS 变量 prefers-color-scheme 媒体查询什么是 prefers-color-scheme?代码示例 方案二:通过 JavaScript 监听系统主题切换 背景 用Taro开发的微信小程序,需求是页面的UI主题想要跟随手机系统的主题适配…...

uni-app 界面TabBar中间大图标设置的两种方法

一、前言 最近写基于uni-app 写app项目的时候,底部导航栏 中间有一个固定的大图标,并且没有激活状态。这里记录下实现方案。效果如下(党组织这个图标): 方法一:midButton的使用 官方文档:ta…...

leetcode 无重复字符的最长子串

3. 无重复字符的最长子串 已解答 中等 相关标签 相关企业 提示 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串的长度。 提示&#xff1a; 0 < s.length < 5 * 104s 由英文字母、数字、符号和空格组成 class Solution:def lengthOfLongest…...

【C++习题】14.滑动窗口_找到字符串中所有字母异位词

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;图解 题目链接&#xff1a; 438. 找到字符串中所有字母异位词 题目描述&#xff1a; 解法 暴力解法&#xff1a; 字母排序后运用滑动窗口解题。 滑动窗口哈希表&#xff1a; 我们可以优化一下&am…...

matplotlib知识

问题与解决 1.module backend_interagg has no attribute FigureCanvas问题 Matplotlib 后端不兼容: matplotlib 使用的后端&#xff08;如 backend_interagg&#xff09;可能与当前环境不匹配或未正确加载。 在代码中显式设置一个兼容的后端&#xff0c;例如 TkAgg、Qt5Ag…...

如何在ubuntu上调试core dump

启用core dump 确认ulimit 状态 ulimit -c 如果输出是0&#xff0c;表示core dump被禁用了 运行 ulimit -c unlimited 再次运行 ulimit -c 确认输出是ulimited 设置core dump路径和文件名格式 下面命令表示设置core dump文件在当前目录&#xff08;%e表示程序名&#x…...

Spring Boot教程之五:在 IntelliJ IDEA 中运行第一个 Spring Boot 应用程序

在 IntelliJ IDEA 中运行第一个 Spring Boot 应用程序 IntelliJ IDEA 是一个用 Java 编写的集成开发环境 (IDE)。它用于开发计算机软件。此 IDE 由 Jetbrains 开发&#xff0c;提供 Apache 2 许可社区版和商业版。它是一种智能的上下文感知 IDE&#xff0c;可用于在各种应用程序…...

排序算法1

排序算法是《数据结构与算法》中最基本的算法之一。 排序算法可以分为内部排序和外部排序&#xff0c;内部排序是数据记录在内存中进行排序&#xff0c;而外部排序是因排序的数据很大&#xff0c;一次不能容纳全部的排序记录&#xff0c;在排序过程中需要访问外存。 常见的内部…...

vector, list 模拟实现

vector 实现 成员属性/迭代器 template<class T> class vector { public:typedef T* iterator;typedef const T* const_iterator;iterator begin() {return _first; }iterator end() {return _end; }const_iterator begin() const {return _first; }const_iterator end…...

中国近代传奇战役

军事战略层面的传奇战役 孟良崮战役&#xff1a;1947年5月&#xff0c;陈毅、粟裕指挥华东野战军在山东孟良崮地区对国民党军进行的一次大规模山地运动歼灭战。此役&#xff0c;我军出其不意地对国民党最强大的王牌之首第七十四师开战&#xff0c;并将其全歼。战役中&#xff…...

微信小程序页面配置详解:从入门到精通

微信小程序页面配置详解:从入门到精通 引言 随着移动互联网的飞速发展,微信小程序作为一种新兴的应用形式,因其便捷性和丰富的功能而受到广泛欢迎。在小程序的开发过程中,页面配置是至关重要的一环。本文将深入探讨微信小程序的页面配置,帮助开发者从基础到高级逐步掌握…...

C#基础题

6.在屏幕上输出如下所示数列&#xff1a;1 1 2 3 5 8 13 21……an(an<10000) 7.求任意两个整数之间所有整数的平方和&#xff1f;&#xff08;要求从键盘输入任意两个整数&#xff0c;调用已定义函数求和&#xff09; 8.将一个二维数组行和列元素互换&#xff0c;存…...

前端开发中v-if 与v-show的区别

v-if v-if指令用于条件性地渲染一块内容。这个块只有当指令的表达式返回true时才会被渲染。 ‌工作原理‌&#xff1a;v-if通过动态地创建和销毁元素来控制元素的显示与隐藏。当条件为false时&#xff0c;对应的元素及其绑定的事件监听器和子组件都会被销毁&#xff1b;当条件…...

Django实现智能问答助手-基础配置

设置 Django 项目、创建应用、定义模型和视图、实现问答逻辑&#xff0c;并设计用户界面。下面是一步一步的简要说明&#xff1a; 目录&#xff1a; QnAAssistant/ # 项目目录 │ ├── QnAAssistant/ # 项目文件夹 │ ├── init.py # 空文件 │ ├── settings.py # 项目配…...

2024-11-25 二叉树的定义

一、基本概念 1.二叉树是n(n>0)个结点的有限集合: ① 或者为空二叉树&#xff0c;即n0。 ②或者由一个根结点和两个互不相交的被称为根的左子树和右子树组成。左子树和右子树又分别是一棵二叉树。 特点&#xff1a; ①每个结点至多只有两棵子树。 ②左右子树不能颠倒&am…...

构建高效 Redis 集群:从问题排查到最佳实践20241125

引言&#xff1a;Redis 集群的重要性 Redis 作为一款高性能的内存数据库&#xff0c;常用于高并发场景&#xff0c;比如缓存、消息队列和排行榜。通过构建 Redis 集群&#xff0c;可以进一步提升可用性与性能。然而&#xff0c;集群的部署并非一帆风顺&#xff0c;常会遇到各种…...

MyBatis多表映射

一、多表映射概念: 1.多表查询结果映射思路: MyBatis思想是:数据库不可能永远是你所想或所需的那个样子。 我们希望每个数据库都具备良好的第三范式或BCNF范式&#xff0c;可惜它们并不都是那样。 如果能有一种数据库映射模式&#xff0c;完美适配所有的应用程序查询需求&…...

[M最短路] lc743. 网络延迟时间(spfa最短路+单源最短路)

文章目录 1. 题目来源2. 题目解析 1. 题目来源 链接&#xff1a;743. 网络延迟时间 相关链接&#xff1a; [图最短路模板] 五大最短路常用模板) 2. 题目解析 怎么讲呢&#xff0c;挺抽象的…很久没写最短路算法了。反正也是写出来了&#xff0c;但脱离了模板&#xff0c;把…...

使用nvm下载多个版本node后提示vue不是内部或外部命令,执行vue create报.vuerc错误

一、使用nvm后执行含vue的相关命令提示vue不是内部或外部命令 前言&#xff1a;之前有项目需要切换node版本&#xff0c;我把node卸载了然后使用nvm下载多个版本的node。现在想通过vue create搭建vue2的项目时提示vue不是内部或外部命令&#xff0c;执行npm i vue/cli后仍然无…...

高端服务器可以防护哪些攻击?

高端服务器&#xff0c;尤其是那些专门设计用于防御网络攻击的高防服务器&#xff0c;能够提供多种层次的防护&#xff0c;以抵御不同类型的网络攻击。以下是高端服务器可以防御的主要攻击类型&#xff1a; 1. DDoS攻击&#xff08;分布式拒绝服务攻击&#xff09; 带宽消耗攻…...

助力花生作物智能化采摘,基于嵌入式端超轻量级模型LeYOLO全系列【n/s/m/l】参数模型开发构建花生种植采摘场景下花生果实智能检测计数系统

秋天&#xff0c;是大地回馈辛勤耕耘者的季节&#xff0c;金黄的稻田、硕果累累的果园、还有那一片片郁郁葱葱的花生地&#xff0c;共同绘制出一幅幅丰收的画卷。对于农民而言&#xff0c;秋收不仅仅是收获的季节&#xff0c;更是他们与土地情感交织、汗水与希望交织的见证。花…...

物联网无线局域网WiFi开发(二):WiFi_RTOS_SDK

一、编译工程模板 &#xff08;一&#xff09;搭建app目录 在SDK目录下新建app目录 cd 到examples目录下 拷贝smart_config下所有文件到app目录下 cd 到app目录下查看文件是否拷贝成功 (二)修改gen_misc.sh vim 打开gen_misc.sh进行编辑 修改SDK_PATH为当前SDK路径&#xf…...

GitLab|应用部署

创建docker-compose.yaml文件 输入docker-compose配置 version: 3.8 services:gitlab:image: gitlab/gitlab-ce:15.11.2-ce.0restart: alwayscontainer_name: gitlab-ceprivileged: truehostname: 192.168.44.235environment:TZ: Asia/ShanghaiGITLAB_OMNIBUS_CONFIG: |exter…...

替换Nacos的MySQL驱动

前言&#xff1a;替换Nacos的MySQL驱动能实现使Nacos支持MySQL8.0及以上版本的MySQL数据库 注&#xff1a;下述教程会使用命令先解压Nacos的jar包然后重新用命令把Nacos压缩成jar包&#xff0c;不然直接用压缩工具替换MySQL驱动后的Nacos是会启动不起来的&#xff08;因为没有替…...

链表内指定区间反转

描述 将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转&#xff0c;要求时间复杂度 O(n)O(n)&#xff0c;空间复杂度 O(1)O(1)。 例如&#xff1a; 给出的链表为 1→2→3→4→5→NULL1→2→3→4→5→NULL, m2,n4m2,n4, 返回 1→4→3→2→5→NULL1→4→3→2→5→NULL. …...

jmeter5.6.3安装教程

一、官网下载 需要提前配置好jdk的环境变量 jmeter官网&#xff1a;https://jmeter.apache.org/download_jmeter.cgi 选择点击二进制的zip文件 下载成功后&#xff0c;默认解压下一步&#xff0c;更改安装路径就行(我安装在D盘) 实用jmeter的bin目录作为系统变量 然后把这…...

JavaScript高级程序设计基础(五)

上接语言基础&#xff1a;JavaScript高级程序设计基础&#xff08;四&#xff09; 本节内容较简单&#xff0c;有一定语言基础的可以跳过 2.5 语句 2.5.1 if语句 具体作用不做过多赘述。需要注意的是&#xff0c;在判断条件里会自动调用Boolean()&#xff1b;并且在执行语句…...

Stable Diffusion 3 部署笔记

SD3下载地址&#xff1a;https://huggingface.co/stabilityai/stable-diffusion-3-medium/tree/main https://huggingface.co/spaces/stabilityai/stable-diffusion-3-medium comfyui 教程&#xff1a; 深度测评&#xff1a;SD3模型表现如何&#xff1f;实用教程助你玩转Stabl…...

深度解析:Vue 自定义指令到底是什么?快来了解

自定义指令的概述 在Vue中,自定义指令是开发者自定义的,用来在DOM元素上执行特定操作的功能。Vue本身提供了多种内建指令(如v-bind, v-model, v-for, v-if等),但有时候我们需要创建自己的指令来实现一些特殊功能。这些功能可以是对DOM的直接操作,或者是为了满足特定的业…...

CVE-2022-4230

打开什么都没有 使用dirsearch扫描到一个wp-admin 访问wp-admin是一个登陆页面 账号密码都在标题中 登陆后是这个页面 在WP Statistics < 13.2.9 – 经过身份验证的 SQLi |CVE 2022-4230 |插件漏洞 (wpscan.com)中&#xff0c;里边有一段对漏洞的描述。 https://wpscan.com…...

什么是 WPF 中的依赖属性?有什么作用?

依赖属性&#xff08;Dependency Property&#xff09;是 WPF 的一个核心概念&#xff0c;它为传统的 .NET 属性提供了增强功能&#xff0c;支持绑定、样式、动画和默认值等功能。通过依赖属性&#xff0c;WPF 提供了一种灵活的数据驱动的方式来处理 UI 属性。 1. 什么是依赖属…...

『 Linux 』网络层 - IP协议 (二)

文章目录 路由NAT技术分片与组装分片的组装IP协议分片的短板 路由 通常情况路由器具备了一个非常重要的功能,即构建子网; 同时路由器需要实现跨网络通信,说明路由器必须存在两个或以上的IP地址,通常在路由器中可以看到几个接口,分别是一个WAN口和几个LAN口; WAN口IP被称为公网I…...

Linux开发者的CI/CD(11)jenkins变量

文章目录 1. **环境变量 (Environment Variables)**常见的环境变量:示例:2. **构建参数 (Build Parameters)**常见的构建参数类型:示例:3 **在 `stages` 块内定义局部变量**示例:使用 `script` 步骤定义局部变量4 变量引用陷阱在 Jenkins 中,变量是自动化流程中非常重要的…...

Python和R荧光分光光度法

&#x1f335;Python片段 Python在处理荧光分光光度法数据方面非常强大&#xff0c;得益于其丰富的数据处理和可视化库&#xff0c;可以轻松实现从数据读取到分析的完整流程。荧光分光光度法用于测量物质在激发光照射下发出的荧光强度&#xff0c;常用于定量分析和特性研究。 …...

理解clickhouse 里的分区和分片键区别

文章目录 分片分区两分片&#xff0c;0副本的cluster 分片 CREATE TABLE logs_distributed AS logs_local ENGINE Distributed(cluster_name, -- 集群名称database_name, -- 数据库名称logs_local, -- 本地表名cityHash64(user_id) -- 分片键&#xf…...

【数据结构笔记】习题

渐进分析 【2010-THU-Mid】f(n) O(g(n))&#xff0c;当且仅当g(n) Ω(f(n))。&#xff08;√&#xff09; 【2010-THU-Mid】若f(n) O(n^2)且g(n) O(n)&#xff0c;则以下结论正确的是&#xff08;AD&#xff09; A. f(n) g(n) O(n^2) B. f(n) / g(n) O(n) C. g(n) O(f(…...

非交换几何与黎曼ζ函数:数学中的一场革命性对话

非交换几何与黎曼ζ函数&#xff1a;数学中的一场革命性对话 非交换几何&#xff08;Noncommutative Geometry, NCG&#xff09;是数学的一个分支领域&#xff0c;它将经典的几何概念扩展到非交换代数的框架中。非交换代数是一种结合代数&#xff0c;其中乘积不是交换性的&…...

【c++】模板详解(2)

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;C 目录 前言 一、非类型模板参数 二、模板的特化 1. 概念 2. 场景举例 3. 函数模板的特化 4. 类模板的特化 全特化 偏特化 1. 部分特化 2. 对参数的…...

DICOM图像处理:深入解析DICOM彩色图像中的Planar配置及其对像素数据解析处理的实现

引言 在DICOM(Digital Imaging and Communications in Medicine)标准中,彩色图像的存储与显示涉及多个关键属性,其中**Planar Configuration(平面配置)**属性(标签 (0028,0006))尤为重要。当遇到彩色DICOM图像在浏览时被错误地分割为9张小图,而实际应显示为一…...

【青牛科技】D3308 一块带有 ALC 的双通道前置放大器。它适用于立体声收录机和盒式录音机。

概述&#xff1a; D3308 是一块带有 ALC 的双通道前置放大器。它适用于立体声收录机和盒式录音机。采用 SIP9、SOP14 的封装形式封装。 主要特点&#xff1a;  带内置 ALC 回路的双通道均衡放大器。  低噪声&#xff1a; VNI1.0V&#xff08;典型值&#xff09;。  开环…...

goframe开发一个企业网站 MongoDB 完整工具包18

1. MongoDB 工具包完整实现 (mongodb.go) package mongodbimport ("context""fmt""time""github.com/gogf/gf/v2/frame/g""go.mongodb.org/mongo-driver/mongo""go.mongodb.org/mongo-driver/mongo/options" )va…...

自动驾驶3D目标检测综述(四)

前三篇分别介绍了前四章的内容&#xff1a; 第一篇&#xff08;介绍、摘要和背景&#xff09;&#xff1a;自动驾驶3D目标检测综述&#xff08;一&#xff09;_3d 目标检测-CSDN博客 第二篇&#xff08;第三章 基于激光雷达的3D目标检测&#xff09;&#xff1a;自动驾驶3D目…...

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

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

3ds Max2024软件详细安装教程+中文安装包(永久使用)

[名称]&#xff1a;3ds Max2024 [大小]&#xff1a;5.07GB [语言]&#xff1a;简体中文 [安装环境]&#xff1a;Win11/Win10 软件介绍 3DS Max是一款三维建模和渲染软件,可以创造宏伟的游戏世界,布置精彩绝伦的场景以实现设计可视化,并打造身临其境的虚拟现实 (VR) ...在广告…...

深入解析 Spring MVC:架构、组件与最佳实践

文章目录 1. **DispatcherServlet**2. **HandlerMapping**3. **HandlerAdapter**4. **Controller**5. **ModelAndView**6. **ViewResolver**7. **View** 工作流程配置方式XML 配置Java 配置 最佳实践示例项目项目目录结构控制器 (HelloWorldController.java)服务层 (HelloWorld…...

专题二十三_动态规划_回文串系列问题_算法专题详细总结

目录 动态规划 回文串系列问题 1. 回⽂⼦串&#xff08;medium&#xff09; 解析&#xff1a; 解决回文串问题&#xff0c;这里提供三个思路&#xff1a; 1.中心扩展法&#xff1a;n^2 / 1 2.马拉车算法&#xff1a;n / n 3.动态规划算法&#xff1a;n^2 / n^2 1.状态表…...

Linux操作系统学习---初识环境变量

目录 ​编辑 环境变量的概念&#xff1a; 小插曲&#xff1a;main函数的第一、二个参数 获取环境变量信息&#xff1a; 1.main函数的第三个参数 2.查看单个环境变量 3.c语言库函数getenv() 和环境变量相关的操作指令&#xff1a; 1.export---导出环境变量&#xff1a; 2.unse…...

通过map文件了解堆栈分配(STM32、MDK5)--避免堆栈溢出

在最近的一个项目的开发中,每当调用到一个函数,程序就直接跑飞。debug跟进去看不出什么逻辑错误,但发现函数内局部变量声明之后,全局变量的值被清零,后来查看局部变量地址已经超出栈的范围,于是确定是栈溢出。如果不稍微了解一下堆栈,在开发过程中可能碰到各种奇怪的错误…...

设计模式——状态模式

定义 状态模式&#xff08;State Pattern&#xff09;是一种行为设计模式。它允许一个对象在其内部状态改变时改变它的行为。对象看起来好像修改了它的类&#xff0c;从直观上看&#xff0c;就像是对象根据自身的状态来动态地切换行为方式。 结构组成 环境&#xff08;Conte…...