news 2026/10/20 7:43:43

基于单片机的无接触红外测温系统设计与实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于单片机的无接触红外测温系统设计与实现

红外测温枪如今已经是随处可见的日常设备,商场入口、医院门诊、小区门卫都用它来快速完成体温筛查。但测温枪是成品设备,如果需要在某个具体场景里定制一套无接触测温装置,或者学生要完成一个相关的课程设计,那台面上的PCB、单片机和传感器模块才是真正需要动手的地方。

这篇博文围绕“基于单片机的无接触温度测量系统设计”展开,聊一聊从零搭建这套系统的完整过程——从传感器选型、硬件连接、核心代码,到参数校准和实际调试中踩过的坑。不管你是嵌入式方向的初学者,还是想快速完成课程设计的在校生,甚至是打算做一个小批量产品的开发者,这篇文章的内容都能直接用上。读完之后,你对红外测温方案的原理和落地手段会有一个清晰完整的认知。

1. 系统整体设计与方案选型

1.1 为什么必须做“无接触”测温

“无接触”三个字,是这个项目最核心的约束条件。它的意义不光是使用体验上的便利,更重要的是物理层面的隔离需求。接触式测温工具如玻璃体温计、电子体温计都必须与被测对象直接接触,在人员密集的场所进行快速筛查时就显得低效,还存在交叉感染的隐患。热红外测温方案则完全没有这个问题——它通过接收物体表面发出的红外辐射来反推温度,不需要触碰到目标,测量速度快,距离合适时精度也不错。

另一个使用场景是测量那些“不能碰”的目标,比如运行中的电气设备、转动部件、高温管道。这种情况下接触式传感器完全无从下手,红外方案几乎是唯一选择。所以“无接触”不只是一个卖点,它是整个系统设计方向的根基,所有后续的方案选型都围绕这个约束展开。

1.2 整体架构与核心流程

这套系统的架构其实并不复杂,核心链路是“传感器感知 → 主控处理 → 输出反馈”。传感器负责把目标物体表面的红外辐射转换成电信号,单片机负责读取、换算成温度值并做后续逻辑判断,显示模块负责把温度呈现给用户,报警模块负责在超温时发出声光提示。

从数据流的角度看,整个流程大概是:红外温度传感器测得目标温度和环境温度,通过通信接口把原始数据发给单片机;单片机对这些原始数据进行换算和滤波,得到稳定的摄氏度数值;然后一边驱动显示屏更新当前温度,一边和预设的阈值进行比较,超出范围就触发蜂鸣器和LED报警。整个过程在毫秒级别内完成,实际体验下来几乎感觉不到延迟。

为了适配不同的使用场景,这套系统还预留了扩展余地,比如可以通过按键调整报警阈值,也可以通过串口把温度数据上报给上位机做记录分析。整体硬件成本控制得很好,用一个入门级单片机加一个模块化红外传感器就能完成核心功能。

1.3 方案选型背后的逻辑

我在搭建这套系统的时候,先后考虑了三种不同的主控方案,各有优劣。最传统的51内核单片机,尤其是STC系列,在高校课程设计中出镜率极高,资料丰富、学习门槛低,缺点是外设资源比较少,做复杂项目会有些吃力。ARM内核的STM32系列性能强、接口丰富,适合功能更复杂的工程应用,但对初学者来说上手难度和开发环境复杂度都高一些。Arduino系列则是走极简路线,封装程度高,搭建Demo很快,但做正式产品或课程设计时显得不够“硬核”。

权衡下来,最终选择了兼容51内核、指令集与经典8051完全兼容且片内Flash可反复擦写的方案——这种芯片在实验中几乎人手一片,资料全、烧录方便、周边电路要求也低。更重要的是,它足够展示从底层寄存器配置到外设驱动的完整逻辑,适合学习嵌入式的入门阶段。如果后续要往产品方向迭代,代码移植到ARM平台也不必推翻重来,因为通信协议和数据处理逻辑是通用的。

2. 硬件模块拆解与选型解析

2.1 红外温度传感器的选择

这个项目的心脏是红外测温传感器。市面上能找到的模块很多,但真正合适的其实就那么几款。最常见的是基于热电堆原理的集成数字传感器——这类芯片把红外热电堆探测器、信号调理电路、ADC和数字接口全部集成在一个封装里,使用非常方便。

选型时我重点比较了三个型号。第一款是Melexis出品的MLX90614,这是目前应用最广泛的单点红外测温芯片,精度高、价格适中、资料丰富,测温范围从零下几十摄氏度到三百多摄氏度,足够覆盖人体测温和工业设备测温的大部分场景。它内置了低噪声放大器和17位ADC,出厂做了校准,直接输出数字信号,接口支持SMBus和PWM两种模式。第二款是借着物联网风潮火起来的非接触式红外温度传感器模块,同样是数字输出,封装形式和接口都做了标准化处理,底层驱动的编写方式差别不大。第三款是更廉价的热电堆模拟输出方案,需要自己搭信号调理电路,精度和稳定性都差一些,省那几块钱不划算。

实测下来,MLX90614在人体温度范围内表现出色,接近黑体辐射源时的误差能控制在0.1到0.2摄氏度以内,环境温度补偿也做得到位。供电电压支持3.3V和5V,电流消耗很小,适合电池供电的便携设备。模块化的Gigabyte版本外围已经配好了稳压和上拉电阻,可以直接插面包板使用。

2.2 主控芯片与最小系统电路

主控芯片的选择决定了整个系统的代码架构和性能上限。考虑到这个项目的功能需求——读取传感器数据、驱动显示屏、控制蜂鸣器和LED——并不需要特别高的主频或大容量存储,所以选一款基础的51内核芯片就足够了。实际工作中我用了双列直插封装的那款经典芯片,32个引脚,两个定时器,一个UART,两个外部中断,内置11.0592MHz晶振电路。这套配置对这个项目来说虽然不是绰绰有余,但也正好够用。

别小看最小系统电路,它出问题的时候往往很难排查。复位电路用的是经典的上电自动复位方案,一个电容加一个电阻,按键手动复位也留了接口。晶振电路要特别注意,负载电容的取值要根据晶振的参数来计算,不是随手放两个20皮法的电容就完事,这直接影响串口通信和定时器计时的准确性。电源部分在芯片电源引脚旁边放了0.1微法的去耦电容,靠近电源入口再加一个10微法的电解电容做低频滤波,实测极大减少了系统的随机重启问题。

2.3 显示模块与声光报警

数据显示部分有几种选择。最经典的LCD1602液晶模块,8位并口或者4位并口驱动,成本低、显示清晰、在强光下也能看清楚,缺点是需要占用较多I/O引脚,而且没有背光调节功能,在暗处使用稍微吃力。OLED显示屏如0.96寸的I2C接口款,显示效果细腻,视角几乎无死角,程序驱动也简单,但尺寸偏小,站远一点就看不清楚数字了。数码管则适合做超大数字显示的车站式方案,几位共用引脚就能搞定,但对小数点显示和字符扩展支持不佳。

我在这套系统里选了LCD1602,原因很简单——课程设计展示场景下,屏幕大、数字清楚、还能显示“Temp: 36.5C”这样的提示语,观感专业。引脚分配上,数据线D4到D7接P0口的低四位,RS、RW、EN分别接P2口的三个引脚。P0口内部没有上拉电阻,做输出必须外接4.7千欧的上拉排阻,否则高电平驱动能力不够,这个细节很多人会漏掉。

报警部分用了有源蜂鸣器和两个LED指示灯。有源蜂鸣器内部已经包含震荡源,只要给高电平或者低电平就能发声,程序里不需要写PWM波形生成逻辑,非常省事。红灯亮加蜂鸣器响表示超温报警,绿灯亮表示温度正常,黄灯可以做成接近阈值的预警提示。三极管驱动蜂鸣器这件事我在实际操作中走了弯路,最开始以为单片机引脚直接就能带起来,结果声音很小,后来加了S8050三极管做开关驱动,效果立刻不一样了。

2.4 电源设计与功耗控制

整个系统的供电方案是很多人忽视的部分,但这个部分恰恰决定了系统的稳定性。传感器模块和OLED或者LCD在电压需求上有细微差异,电源处理不好就会导致读数跳动、通信失败甚至芯片发烫。我在这套系统里用USB供电作为主方案,5V经过一个低压差稳压芯片降到3.3V给传感器使用,单片机则直接从5V取电。

功耗方面,单片机和LCD1602在正常工作电流下整体功耗低于100毫安,传感器模块的功耗更低,所以如果用18650电池供电,理论上可以连续运行十个小时以上。如果要做便携版本,还可以让单片机和显示屏进入低功耗模式,电流可以降到微安级别。设计时在电源输入端加了拨动开关,不用的时候彻底断电,这个细节对电池供电场景很重要。

3. 核心电路设计与软件实现

3.1 传感器接口电路与通信协议

MLX90614和单片机之间的通信走的是I2C总线(兼容SMBus),这是这套系统中通信层面的关键环节。I2C只需要两根线——时钟线SCL和数据线SDA,通过地址寻址的方式挂载多个设备。在电路设计上,这两根线都必须接上拉电阻到VCC,阻值通常选4.7千欧或者10千欧。拉得太小会增加功耗,拉得太大则在高总线电容情况下通信波形变差。

我之前自己手写过I2C主机协议,用普通I/O口模拟时序来完成通信。标准的I2C时序很严格,起始条件、停止条件、应答信号、数据有效性都有明确要求。SCL在高电平期间,SDA上的数据必须保持稳定;只有在SCL为低电平的时候,SDA才能切换状态。起始条件是SCL高电平时SDA由高变低,停止条件反之。如果这些时序没有写对,传感器可能完全不响应,或者读回来的数据错得离谱。

地址方面,MLX90614的7位I2C地址默认是0x5A,读写地址分别是0xB4和0xB5。模块化的GY-906板子把地址线用电阻焊死了,自己画板的话还预留改地址的焊盘。如果总线上只挂这一个设备,默认地址就够了。

3.2 LCD1602驱动与字符显示

LCD1602的驱动是整个项目里代码量最大、最繁琐的部分之一。它支持8位和4位两种并行接口模式,8位模式一次发送一个完整字节,需要8根数据线;4位模式分两次发送,先高4位后低4位,只需要4根数据线。我在这个项目里用了4线模式,省下来的引脚可以接按键和传感器。

初始化时序是一个容易翻车的点。LCD1602在VCC上电之后需要一个较长的延时来完成内部复位,标准流程是延时至少15毫秒,然后写0x30指令,再延时至少5毫秒,再写一次0x30,再延时至少5毫秒,第三次写0x30,之后才能切换到功能设置、显示开关、清屏等指令。如果上电后立即初始化,屏幕经常出现满屏方块或者乱码,八成就是时序间隔不够。

显示温度值时,我会把温度拆分成整数部分和小数部分,分别转换成字符送入显示缓冲区。项目里用到了sprintf函数做字符串格式化,但51单片机上做浮点格式化开销比较大,更高效的做法是直接用整数运算:把温度值乘以10取整,然后拆出高两位作为整数部分、低一位作为小数部分,这样能在不引入浮点库的前提下得到一位小数的显示精度。

3.3 温度计算与数据处理

MLX90614返回的原始数据是一个16位的二进制补码值,含义是目标温度或者环境温度的开尔文温度的100分之一。换算公式如下所示,每1个LSB代表0.02摄氏度,0x07寄存器保存的是目标物体温度,0x06寄存器保存的是传感器所在环境温度。

计算过程并不复杂:将寄存器值乘以0.02,再减去273.15,就得到摄氏度温度值。从实际工程角度看,这个换算必须用浮点数运算,51单片机没有硬件浮点单元,编译出来的浮点库开销不小。我试过用整型运算近似替代,把寄存器值乘以2再减去27315,得到的结果是摄氏度的100倍,显示的时候手动加小数点,这样既保证了精度,又避免了浮点运算带来的代码体积和耗时的增加。

数据处理方面还有一个平均滤波的细节。红外传感器存在一定的随机噪声,直接显示原始温度值时最后一位会不停地跳变。我做了滑动平均滤波,每秒钟读取四个样本,去掉最大值和最小值后取平均,读数立刻稳定下来。这种处理方式简单有效,比写卡尔曼滤波容易得多,对低速温度变化来说滤波效果已经足够好。

3.4 核心代码实现剖析

主程序的逻辑结构是无限循环加分时处理:初始化硬件,然后在循环中依次读取传感器、更新显示、检测按键和报警阈值。为了不发生显示刷新阻塞传感器读取的情况,我把传感器读取和显示更新拆成了两个步骤,读取完成后先缓存数据,显示模块只负责把缓存渲染到屏幕上。

温度读取的核心部分如下:

// 读取MLX90614目标温度寄存器0x07 unsigned int readMLX90614(unsigned char reg) { unsigned int raw = 0; unsigned char lowByte, highByte; unsigned char ack; i2cStart(); i2cSendByte(0xB4); // 写地址,0x5A<<1,最低位是写标志 ack = i2cSendByte(reg); // 发送寄存器地址 // 重新发起起始条件,切换为读模式 i2cStart(); i2cSendByte(0xB5); // 0x5A<<1 | 1,读标志 lowByte = i2cReadByte(ACK); highByte = i2cReadByte(NACK); i2cStop(); raw = ((unsigned int)highByte << 8) | lowByte; return raw; } // 换算温度,返回温度值乘以100的整数形式 int toTemperature100(unsigned int raw) { // 每个LSB = 0.02K,减去273.15K转换为摄氏度 return (int)(raw * 2) - 27315; }

这套代码在STC单片机上运行稳定,I2C通信速度设置为100kHz的标准模式。使用自制I2C时序时,需要注意SCL高电平时SDA数据必须保持稳定这个规则,否则传感器发送的数据会错位。

报警判断的逻辑也很简单,读取温度值之后和阈值比较,温度超过阈值就置位报警标志,蜂鸣器响三秒后自动停止,避免持续噪音。这个功能利用单片机内部定时器实现非阻塞延时,主循环不会被延时函数占住,保证了系统响应速度。

3.5 硬件焊接与装配过程

原理图和PCB设计走的是经典的单面布线方案。第一版我做了面包板验证,所有模块用杜邦线连接,方便调试和替换。功能都跑通之后,再用洞洞板手工焊接了一版成品。焊接的关键步骤是先把座子焊上,再插芯片和模块,最后焊电源线和传感器接口线。焊点质量直接影响系统稳定性——冷焊、虚焊、桥接都是排查问题的重点怀疑对象。

传感器探头的安装位置对测量精度影响很大。测温时传感器需要对准被测目标,中间不能有遮挡物。如果是测量人体额头温度,传感器应该离额头两三厘米左右,距离太远红外辐射衰减会导致读数偏低。我在外壳设计上专门开了一个小窗口,传感器透镜正好嵌在窗口里,既固定了位置又不会有遮挡。

4. 参数标定与精度调试

4.1 距离与发射率的影响

接触过红外测温的人都知道,发射率和测量距离是决定精度的重要参数。MLX90614默认的发射率系数设置为0.95,这个值对应大多数非金属表面的辐射特性。人体皮肤的发射率大约在0.98左右,如果严格来说应该把传感器内部的发射率寄存器改成对应值,但在实际人体测温场景里,我用医用电子体温计和这套红外系统做对照,误差都在0.3摄氏度以内,所以默认值已经够用了。

测量距离方面,MLX90614的光学分辨率和视场角决定了一个特性——被测目标必须完全填满传感器的视场,否则传感器会把背景温度一起算进去。当传感器距离额头太远时,视场范围已经不完全是额头区域了,实际测到的温度会低于真实体温或者高于环境温度,几乎无法得到准确值。我实测过,传感器距离目标1厘米到5厘米之间的读数最稳定,超过这个范围测量值就开始明显漂移。

4.2 校准方法与黑体参照

要校准这套系统,最理想的手段是使用标准黑体炉。黑体炉是经过标定的辐射源,温度控制准确,可以作为红外测温仪的校准基准。通常的做法是把黑体炉设定在几个不同的温度点,比如25摄氏度、35摄氏度、40摄氏度、45摄氏度,记录系统实际显示值和黑体炉设定值之间的偏差,然后做线性插值补偿。

如果没有黑体炉,也可以用医用电子体温计和水浴做简单的替代校准方案。准备一杯37到40摄氏度的温水,用电子体温计测出准确温度,然后把红外传感器对准水面读取数值,两者差值的平均值就是系统的偏移修正量。这个方法虽然不如黑体炉严谨,对非专业校准场景来说已经能保证基本准确性了。

4.3 环境温度影响与补偿

MLX90614内部设计了环境温度补偿电路,传感器读到的目标温度已经是经过环境温度修正的最终结果,不需要在单片机端再做额外的环境温度补偿。但这个修正能力是有条件的——不要把传感器放在太靠近发热源的位置,比如紧贴着功率电阻或者电源芯片,局部温度过高会影响传感器内部的热平衡,导致读数异常。

我在实际测试中发现,如果系统工作环境温度变化范围很大,比如从室内空调房拿到阳光直射的户外,刚开机的几分钟内读数会明显偏低,这是因为传感器本身还没有达到热平衡,内部环境温度补偿算法暂时失效。解决方法是给传感器外加一个小的散热屏蔽罩,或者等系统预热一到两分钟再开始测量。在快速筛查场景里,让设备处于通电待机状态,能有效规避这个问题。

5. 常见问题与排查技巧实录

5.1 I2C通信失败与总线挂死

这是整套系统里出现频率最高的问题。传感器读不到数据,或者读到0xFFFF,大概率是I2C通信出问题了。排查顺序从供电开始,先用万用表量传感器模块的VCC和GND,电压应该在3.3V左右且稳定。然后检查SDA和SCL的上拉电阻,很多模块内部已经焊上去了,但自己画板的时候容易漏掉。

还有一类问题比较隐蔽,就是I2C总线挂死。总线因为某个设备拉低了SDA却一直不释放,导致后续通信全部失败。这种情况通常发生在某个I2C操作中途被打断的情况下,比如读数据期间发生了外部中断,中断服务函数里又碰了I2C引脚。解决办法是在I2C通信过程中关闭中断,或者通信完成后强制将SDA和SCL引脚拉高释放总线。

5.2 温度读数跳变严重

如果滤波做了温度还是在0.5摄氏度以上浮动,问题通常不出在算法上,而是出在硬件上。排查顺序是先检查传感器供电的纹波,示波器测量会发现传感器供电引脚上有明显的毛刺。加一个10微法和0.1微法的电容组合之后,读数一下稳定了。

另一个容易忽略的是传感器探头和目标的距离不稳定。手持使用时手抖会导致距离变化,进而导致温度数值轻微浮动。如果是固定式安装,用支架把传感器固定住能消除大部分跳动。还有一点,传感器透镜表面脏了也会导致读数异常,用无尘布和酒精轻轻擦拭可以解决问题。

5.3 LCD显示乱码或不亮

LCD1602出现满屏方块或者第一行有字第二行没反应,基本可以确定初始化时序不满足要求。很多人写代码不重视延时,初始化间隔太短导致LCD内部状态机没准备好。另一个常见问题是对比度调节旋钮调到了极限位置,屏幕看上去完全不显示内容。LCD1602的第三脚是V0对比度调节端,接电位器调节电压到合适位置,一般1千欧到5千欧的电位器就能解决问题。

5.4 常见问题速查表

问题现象可能原因排查方向
传感器返回数据全为FF地址错误或总线挂死检查I2C地址、接线、上拉电阻
温度读数比实际低很多测量距离太远或目标未填满视场调整安装位置,让探头靠近被测目标
LCD满屏方块初始化时序不对延长延时,检查时序逻辑
LCD完全无显示,背光不亮供电断线或对比度调太高查供电、查V0电位器调节状态
蜂鸣器不响驱动能力不足或引脚分配冲突加三极管驱动,检查端口复用
按键调节无反应按键消抖不充分增加消抖延时,检查按键电平逻辑
温度在小数位跳变滤波不够或供电纹波大增加平均滤波窗口,电源加固滤波电容

这些坑都是实打实踩过的,列出来给后来者省点时间。

6. 功能扩展与场景化应用

6.1 从固定阈值到自适应报警

目前的报警逻辑是固定阈值比较,适合设定37.3摄氏度这样的体温筛查线。实际应用场景千差万别,比如工业场景里要监测的设备温度从五十度到几百度都有可能,固定的报警阈值完全不够用。最好的做法是把阈值设计成可以通过按键调节的参数,保存在单片机的EEPROM里,断电不丢失,下次开机直接沿用上次的设定。这个改动看似简单,实际涉及菜单逻辑、按键处理、数据存储三个模块的联动,是一个完整的增功能练习。

6.2 无接触测温与数据记录结合

如果想让系统更有工程价值,可以增加一个串口通信模块,把每次测量得到的温度数据连同时间标志实时发送给上位机,上位机软件负责绘制温度曲线和存储历史记录。我个人的建议是使用USB转TTL模块,数据格式用JSON,方便后续接入其他数据处理程序或者云端平台,这样就能实现远程监控和多设备集中管理。

6.3 场景适配的安装技巧

针对固定安装场景,可以把传感器装在支架上,对准需要监测的固定位置,用螺丝锁死防止松动。如果是入口通道式的人体测温方案,传感器高度调到一米五左右,正好对准大部分人额头的位置。需要识别更大范围的话,可以考虑加一个云台电机做扫描,或者用更高分辨率的红外热成像阵列。

我在实际工作中见过一个很有意思的扩展方案:把这种单点测温模块安装在机械臂末端,配合视觉引导,让机械臂自动找到目标零件的测温点,实现流水线上的批量自动测温。从这个角度看,单点测温系统做成的不是一个孤立产品,而是可以嵌入更大自动化系统的传感节点。

最后再分享一个体会:这类看似简单的单片机系统设计项目,真正宝贵的地方不在于它的电路有多复杂、代码有多精妙,而在于从零开始把一块散件搭成一个能稳定运行、测得准跑得稳的完整设备,这个过程里形成的调试直觉和排查能力,是做任何后续项目的底层功底。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/20 7:43:15

Hadoop YARN AsyncDispatcher源码解析:事件驱动与问题排查指南

啃到 Hadoop YARN 源码的这个阶段&#xff0c;你大概率已经对 ResourceManager、NodeManager 这些大骨架有了概念。但真正让整个集群状态像流水线一样转起来的&#xff0c;其实是藏在org.apache.hadoop.yarn.event包里的 AsyncDispatcher——也就是 YARN 事件异步分发器。本系列…

作者头像 李华
网站建设 2026/10/20 7:42:48

大模型面试高频问题详解:Transformer、RAG与Agent应用实战

“大模型面试必备&#xff1a;小白程序员必看&#xff0c;收藏这些高频问题轻松拿下Offer&#xff01;”这两年大模型岗位的面试难度&#xff0c;说实话有点两极分化。一边是算法岗卷到飞起&#xff0c;论文、比赛、实习经历缺一不可&#xff1b;另一边是应用开发、工程落地、P…

作者头像 李华
网站建设 2026/10/20 7:42:05

从工具焦虑到组织赋能:AI学习进阶路径与实践指南

1. 先看清“工具焦虑”的本质&#xff1a;你不是学不会&#xff0c;是路径没拉开我见过太多人卡在同一个地方&#xff1a;今天听说某某大模型出了新功能&#xff0c;赶紧去试&#xff1b;明天看到别人用AI做了一个很炫的Demo&#xff0c;又觉得自己落后了&#xff1b;后天刷到一…

作者头像 李华
网站建设 2026/10/20 7:41:19

微信小程序餐饮点餐开箱即用:本地mock+沙箱支付闭环

简介&#xff1a;这是一套开箱即用的微信小程序餐饮点餐外卖系统源码&#xff0c;面向前端开发者、小程序初学者及中小型餐饮商家技术负责人&#xff0c;旨在快速搭建具备点餐、外卖、堂食叫号、微信支付等核心功能的轻量级线上服务。资源包共521个文件&#xff0c;涵盖137个JS…

作者头像 李华
网站建设 2026/10/20 7:41:02

Postgres-XL GTM节点部署管理与高可用运维实战

接手任何一套Postgres-XL集群&#xff0c;我第一件事永远是去查GTM那层&#xff0c;而不是先看Coordinator和Datanode。很多人觉得GTM就是个发号器&#xff0c;配置文件里填个IP就行&#xff0c;直到线上出现交易卡死、事务号断层、快照错乱&#xff0c;才回头承认这玩意儿才是…

作者头像 李华
网站建设 2026/10/20 7:40:04

Tokenizer Padding全解析:训练与推理阶段的正确用法与踩坑经验

我最初接触 Tokenizer Padding 时&#xff0c;以为它只是“给短句子末尾补一堆没意义的占位符”&#xff0c;直到有一次训练 loss 曲线莫名抖动、单独预测和批量预测结果对不上&#xff0c;才意识到这个环节藏着不少约定。这篇笔记&#xff0c;就是我在某短文本分类项目、某序列…

作者头像 李华