pyKT知识追踪框架:标准复现与统一评估实践指南

1. 从零散脚本到统一基准:为什么需要pyKT这样的知识追踪框架

做知识追踪(Knowledge Tracing)方向的朋友,大概都有过这样的经历:想复现一篇论文的结果,翻遍作者放出来的代码,发现数据预处理各写各的,评估指标口径不一致,跑出来的AUC跟论文里差了好几个点,然后开始怀疑人生——到底是自己实现错了,还是作者留了一手。这种"复现焦虑"在知识追踪领域尤其明显,因为这个方向的数据集格式五花八门,模型结构从早期的贝叶斯方法到后来的循环网络、注意力机制、图网络,跨度极大,如果没有一个统一的基准框架,光是数据加载和指标计算就能耗掉大半个月。

pyKT就是冲着这个痛点来的。它是一个开源的Python库,目标是把知识追踪领域的标准数据集、主流模型、统一评估流程整合到一套代码里,让研究者能在一个公平的基准上比较不同方法。这个系列我打算分几篇来拆,前面几篇聊了整体架构和数据管道,这一篇重点讲标准复现这件事——也就是pyKT怎么保证你跑出来的结果和论文里报告的数字对得上,以及在实际操作中你会遇到哪些坑。

如果你正在做知识追踪相关的实验,或者准备基于某个公开数据集发论文,又或者只是想把别人的模型拿来跑一跑看看效果,那pyKT这套东西值得花时间摸清楚。它不只是一个代码仓库,更像是一套约定俗成的实验规范。下面我会从数据组织、模型接口、训练流程、评估口径几个层面,把标准复现的完整链路拆开讲,中间穿插我自己踩过的坑和验证过的操作细节。

2. 数据管道的标准化:pyKT怎么把五花八门的数据集统一成一张表

2.1 知识追踪数据的原始形态与统一抽象

知识追踪任务的数据,本质上是一串"学生-题目-作答结果"的交互记录。但不同数据集的组织方式差异很大。有的数据集把每个学生的记录存成一个独立文件,有的把所有交互堆在一个大CSV里;题目ID有的是数字,有的是字符串;作答结果有的用0/1,有的用True/False,还有的用"correct"/"wrong"。更麻烦的是,有些数据集还附带题目与知识点的多对多映射表,有些则把知识点直接编码在题目ID里。

pyKT的做法是定义一个统一的中间表示:每条交互记录至少包含学生ID、题目ID、作答结果、时间戳(可选)四个字段,知识点映射单独存成一张表。所有数据集在加载时都要经过一层转换,把原始格式映射到这个统一结构上。这个设计看起来简单,但实际价值很大——它意味着你换数据集时,模型代码完全不用动,只需要换一个数据加载配置。

我实测下来,pyKT对几个主流数据集(比如ASSISTments系列、EdNet、Statics等)都提供了预处理脚本。这些脚本会把原始文件转成统一的CSV格式,同时生成题目到知识点的映射文件。这里有个细节值得注意:不同数据集的知识点粒度不一样,有的数据集一个题目对应多个知识点,有的只对应一个。pyKT在数据加载时会根据配置决定怎么处理多知识点的情况,常见做法是取第一个知识点或者把所有知识点拼成一个集合。这个选择会直接影响模型输入,进而影响最终指标,所以复现时一定要确认论文里用的是什么策略。

2.2 数据划分的坑:随机划分还是按学生划分

数据划分是复现中最容易被忽视、又最容易导致结果对不上的环节。知识追踪的标准做法是把交互记录按时间顺序排列,然后做划分。但这里有个关键问题:划分的单位是什么?是按交互记录随机划分,还是按学生划分?

如果按交互记录随机划分,同一个学生的记录会同时出现在训练集和测试集里,这会导致信息泄露——模型在训练时已经见过这个学生的部分作答模式,测试时自然表现更好。严格的评估应该按学生划分,保证测试集里的学生在训练阶段完全没见过。但早期一些论文为了跟已有工作对比,用的是随机划分,这就导致同一个模型在不同论文里的指标没有可比性。

pyKT在数据划分上提供了配置项,默认推荐按学生划分,但也保留了随机划分的选项以便复现旧结果。我的建议是:如果你要做新实验,一律用按学生划分;如果你要复现某篇具体论文,先去查它的划分方式,然后在pyKT里对应设置。这个细节不搞清楚,后面指标差个两三个点是常有的事。

2.3 序列截断与填充:影响的不只是显存

知识追踪模型处理的是变长序列,因为每个学生的交互次数不一样。训练时需要把序列截断或填充到固定长度。pyKT里有个max_seq_len参数控制这个长度。这个参数的选择有几个考量:太短会丢失长序列学生的信息,太长会浪费显存且引入过多填充。

但这里有个更隐蔽的坑:截断策略。是保留最早的N条记录,还是保留最近的N条?对于知识追踪任务,最近的交互通常更能反映学生当前的知识状态,所以保留最近N条往往更合理。但有些论文用的是从头截断,复现时如果搞反了,指标会有明显差异。pyKT在数据加载时可以通过配置指定截断方向,我建议在复现前先确认原论文的设置。

另外,填充部分在计算损失时必须被mask掉,否则模型会去拟合这些无意义的填充值。pyKT在模型接口层面统一处理了mask,但如果你自己改模型结构,一定要检查mask有没有正确传递。我就遇到过因为mask没传对,导致验证集loss异常低但测试集指标很差的情况,排查了半天才发现是填充位置参与了损失计算。

3. 模型接口的统一:换模型像换插件一样简单

3.1 模型基类定义了哪些必须实现的方法

pyKT为所有知识追踪模型定义了一个基类,规定了几个必须实现的方法:前向传播、损失计算、预测输出。这个设计的目的是让训练流程和模型实现解耦——训练器只跟基类打交道,具体是哪个模型由配置决定。

前向传播的输入通常是三个张量:题目序列、作答结果序列、以及可选的辅助信息(如知识点序列、时间间隔等)。输出是对每个时间步的预测概率,表示学生在下一题答对的概率。损失计算默认用二元交叉熵,但有些模型可能有额外的正则项或辅助损失,这些都在模型内部处理。

这个接口设计的好处是,你想试一个新模型,只需要按照基类实现这几个方法,然后注册到模型工厂里,训练和评估流程完全不用改。我试过把一个小型注意力模型接进去,从写代码到跑通只花了不到一小时,大部分时间还是在调超参,接口对接本身很快。

3.2 模型注册机制与配置驱动

pyKT用配置驱动的方式管理实验。一个典型的配置文件包含数据路径、模型名称、超参数、训练轮数、评估指标等。模型通过名称注册到工厂里,配置里写什么名字,训练器就实例化哪个模型。

这种设计的一个实际好处是,你可以把不同模型的配置存成不同的文件,跑实验时只需要切换配置文件,不用改代码。对于需要大量对比实验的场景,这个效率提升很明显。我自己的做法是建一个配置模板,把公共部分抽出来,每个模型只写差异部分,然后用脚本批量生成配置并提交训练任务。

但这里有个需要注意的地方:不同模型的超参数空间差异很大。比如循环网络对学习率敏感,注意力模型对dropout敏感,图网络对邻接矩阵的构建方式敏感。pyKT提供了默认超参,但这些默认值不一定适合你的数据集。我的经验是,先用默认值跑一遍确认流程通,然后针对关键超参做小范围搜索,不要一上来就大规模调参,那样既费时间又容易过拟合验证集。

3.3 从论文到代码:模型复现的常见偏差来源

即使框架统一了,复现论文结果仍然可能有偏差。根据我的经验,偏差主要来自几个方面:

第一,初始化方式。有些论文没写清楚参数初始化用的是Xavier还是He,不同的初始化在训练初期影响很大,尤其是深层模型。pyKT的模型实现里通常会注明初始化方式,但如果论文没写,就只能猜。

第二,优化器细节。学习率调度、权重衰减、梯度裁剪这些细节,论文里经常一笔带过甚至不提。但这些对最终结果的影响可能超过模型结构本身。pyKT的训练器提供了这些配置项,复现时需要根据论文描述或常见实践来设置。

第三,数据预处理。前面提到的知识点映射策略、序列截断方向、异常值处理等,都会影响结果。pyKT的预处理脚本尽量还原了各数据集的标准处理方式,但如果你用的是自己处理的数据,就要格外小心。

第四,评估时机。是在每个epoch结束后评估,还是固定步数评估?是取最后一个epoch的结果,还是取验证集最优的结果?这些选择会导致指标差异。pyKT默认取验证集最优的模型在测试集上评估,这也是比较标准的做法。

4. 训练与评估流程:指标口径统一才是公平比较的前提

4.1 AUC和ACC的计算细节

知识追踪最常用的两个指标是AUC(曲线下面积)和ACC(准确率)。AUC衡量的是模型对正负样本的排序能力,ACC衡量的是在某个阈值下的分类准确率。这两个指标看起来简单,但计算细节上有不少讲究。

首先是AUC的计算。标准做法是把所有测试样本的预测概率和真实标签收集起来,然后计算ROC曲线下面积。但这里有个问题:是每个学生单独算AUC再平均,还是把所有学生混在一起算一个全局AUC?这两种做法结果可能不同。pyKT默认用的是全局AUC,这也是大多数论文采用的口径。如果你要复现的论文用的是按学生平均,那就要在评估时调整。

其次是ACC的计算。ACC需要一个阈值把概率转成类别。最直接的做法是用0.5作为阈值,但有些论文会先在验证集上搜索最优阈值,然后在测试集上用这个阈值。这两种做法得到的ACC可能差好几个点。pyKT默认用0.5,但提供了阈值搜索的选项。复现时一定要确认论文用的是哪种。

还有一个容易被忽略的点:是否包含第一个时间步。因为第一个时间步没有历史信息,模型只能靠题目本身的先验来预测,这个预测通常接近随机。有些论文在计算指标时会跳过第一个时间步,有些则包含。这个差异虽然不大,但在指标已经很高的时候(比如AUC 0.8以上),零点几个点的差异也可能影响结论。

4.2 早停策略与模型选择

训练过程中什么时候停止,用哪个模型做最终评估,这也是复现的关键环节。常见做法是监控验证集AUC,如果连续N个epoch没有提升就停止训练,然后取验证集AUC最高的那个模型在测试集上评估。pyKT的训练器实现了这个逻辑,N可以通过配置设置。

但这里有个陷阱:如果你同时监控多个指标(比如AUC和ACC),它们的最优epoch可能不一致。这时候选哪个?我的建议是明确一个主指标,通常用AUC,因为它是阈值无关的,更稳定。如果论文报告了多个指标,先确认它的主指标是什么,然后按同样的逻辑选模型。

另外,早停的耐心值(patience)也会影响结果。耐心值太小,模型可能还没收敛就停了;太大,又容易过拟合。pyKT默认的耐心值在大多数数据集上表现合理,但如果你的数据集特别大或特别小,可能需要调整。我一般会先跑一个较长的训练(比如100个epoch),观察验证集指标的曲线,然后根据曲线形状来定耐心值。

4.3 随机种子与结果可复现性

深度学习实验有个老生常谈的问题:随机种子。不同的随机种子会导致不同的初始化、不同的数据打乱顺序、不同的dropout掩码,最终结果会有波动。在知识追踪任务上,同一个模型跑五次,AUC的波动可能在0.005到0.01之间。这意味着如果你只跑一次,跟论文比差个0.005,可能只是随机波动,不是实现错误。

pyKT支持设置随机种子,但要注意,即使设了种子,如果你用的是GPU,某些操作仍然是非确定性的。要完全可复现,需要设置CUDA的确定性模式,但这会降低训练速度。我的做法是:调参阶段不固定种子,跑多次取平均;最终报告结果时固定种子,并说明跑了多少次。这样既能得到稳定的结论,又能在需要时复现具体数字。

5. 实操中遇到的典型问题与排查思路

5.1 指标对不上时的排查顺序

当你跑完pyKT,发现指标跟论文差了一截,不要急着改模型。按照下面的顺序排查,能解决大部分问题:

第一步,确认数据集版本。同一个名字的数据集可能有多个版本,比如ASSISTments有2012、2015、2017等多个版本,不同版本的题目数、学生数、交互数都不一样。先确认你用的版本和论文一致。

第二步,确认数据划分。是按学生划分还是随机划分?训练/验证/测试的比例是多少?这些信息论文里通常会在实验设置部分提到。

第三步,确认评估口径。AUC是全局还是按学生平均?ACC的阈值是0.5还是搜索的?是否跳过第一个时间步?

第四步,确认超参数。学习率、batch size、序列长度、优化器这些,尽量跟论文对齐。如果论文没写,用pyKT的默认值,但要在论文里注明。

第五步,确认模型实现细节。如果以上都对齐了还是有差距,可能是模型结构或初始化的问题。这时候可以尝试联系作者,或者找找有没有其他复现版本做交叉验证。

这个排查顺序的核心逻辑是:先排除数据和评估层面的问题,再怀疑模型本身。因为数据层面的问题更常见,也更容易验证。

5.2 显存不够时的取舍策略

知识追踪模型的显存占用主要来自序列长度和batch size。如果你跑大模型(比如基于Transformer的结构)或者长序列数据集,显存很容易爆。pyKT提供了一些显存优化的选项,比如梯度累积、混合精度训练。

梯度累积的思路是用小batch跑多次,把梯度攒起来再更新,效果上等价于大batch。混合精度则是用半精度浮点数做前向和反向,能省将近一半显存,但要注意数值稳定性,有些模型在混合精度下会出NaN。

如果这些还不够,就只能减小序列长度或模型规模。减小序列长度会丢失长序列信息,减小模型规模会降低表达能力,两者都会影响指标。我的建议是优先用梯度累积和混合精度,实在不行再动序列长度,最后才考虑换小模型。因为序列长度和模型规模是论文实验设置的一部分,改了就跟论文不可比了。

5.3 训练不收敛的常见原因

训练不收敛表现为loss不下降或者震荡,验证集指标不提升。常见原因有几个:

学习率太大是最常见的。知识追踪模型的学习率通常在1e-3到1e-4之间,如果设成1e-2,很可能直接发散。可以先用一个很小的学习率(比如1e-5)跑几个step,确认loss在下降,然后逐步放大。

数据有问题也会导致不收敛。比如标签全是0或全是1,或者序列里有大量异常值。可以打印一下数据的统计信息,确认标签分布合理。

模型初始化不当也会导致不收敛,尤其是深层模型。如果模型有多个注意力层或循环层,初始化方差没控制好,梯度会爆炸或消失。可以尝试加梯度裁剪,或者换一种初始化方式。

还有一个容易被忽略的原因:batch size太小。太小的batch会导致梯度噪声大,训练不稳定。可以尝试增大batch size,或者用梯度累积来模拟大batch。

6. 基于pyKT做扩展实验的一些经验

6.1 接入自定义数据集的完整流程

如果你想用自己的数据集跑pyKT,需要做几件事。首先,把数据转成pyKT要求的格式:一个交互记录表(学生ID、题目ID、作答结果、时间戳),一个题目-知识点映射表。然后,写一个数据加载配置,指定文件路径和字段名。最后,在配置里注册这个数据集,就可以像用内置数据集一样使用了。

这里有个细节:pyKT的数据加载器默认会做一些预处理,比如过滤掉交互次数太少的学生、把题目ID重新映射成连续整数等。这些预处理会影响数据规模,进而影响指标。如果你要跟其他工作对比,要确认预处理策略是否一致。

另外,自定义数据集的知识点映射可能需要手动构建。如果原始数据里没有知识点信息,你可能需要用题目内容做聚类,或者用其他方式生成知识点标签。这部分工作量大且主观性强,做的时候要记录清楚,方便后续复现。

6.2 修改模型结构的注意事项

pyKT的模型实现是模块化的,你可以很方便地替换某个组件,比如把LSTM换成GRU,或者把注意力机制换成另一种变体。但修改时要注意几点:

第一,保持接口一致。输入输出的张量形状和含义不能变,否则训练器会报错。

第二,注意参数量的变化。换了组件后参数量可能变化很大,如果参数量增加太多,可能需要调整学习率或加正则化。

第三,重新调参。换了结构后,原来的超参不一定最优,最好重新做一轮小范围搜索。

第四,记录修改。如果基于pyKT做了修改,要在论文或报告中说明,否则别人复现时用原版pyKT会对不上。

6.3 多模型对比实验的组织方式

做多模型对比时,建议用统一的配置模板,只改模型名称和模型特定超参。这样能保证数据划分、训练流程、评估口径完全一致,对比才公平。pyKT的配置系统支持这种用法,你可以写一个基础配置,然后用继承或覆盖的方式生成各模型的配置。

跑实验时,建议把结果统一记录到一个表格里,包含模型名称、关键超参、验证集指标、测试集指标、训练时间等信息。这样后续分析时一目了然。我自己的做法是用一个脚本自动读取各模型的日志,提取指标并生成对比表格,省去手动整理的麻烦。

还有一点:多模型对比时,每个模型最好跑多次取平均,至少三次。因为单次结果受随机种子影响,可能误导结论。如果算力有限,至少对最终选定的几个模型跑多次,其他模型跑一次做初筛。

7. 关于标准复现这件事的个人体会

标准复现听起来是个技术活,但做久了会发现,它更像是一种实验素养。pyKT这样的框架帮你解决了大部分工程问题,但真正决定复现成败的,是你对实验细节的关注程度。我见过太多人跑完代码发现指标不对,第一反应是"这框架有问题",然后花大量时间改代码,最后发现是自己数据划分搞错了。

我的经验是,复现之前先把论文的实验设置部分仔细读三遍,把所有能确认的细节列成清单,然后逐项在代码里核对。确认不了的细节,做好记录,在结果报告里说明。这样即使最终指标有微小差异,也能解释清楚差异来源,而不是一笔糊涂账。

另外,不要迷信论文里的数字。有些论文的结果可能是在特定条件下得到的,换了数据集或评估方式就不适用。复现的目的是理解方法的核心思想,而不是追求数字上的完全一致。如果差异在合理范围内(比如AUC差0.01以内),且你能解释差异来源,那这次复现就是成功的。

pyKT这个框架还在持续更新,社区也在不断补充新的数据集和模型。如果你在做知识追踪相关的工作,建议定期关注它的更新,看看有没有新的基准结果可以参考。同时,如果你发现了框架里的问题或者有改进建议,也可以反馈给社区,大家一起把标准做得更好。

相关新闻

大模型高效使用指南:提示词、思维链与实战技巧全解析

大模型高效使用指南:提示词、思维链与实战技巧全解析

最近两年,AI大模型的热度可以说是一路狂飙。刷短视频、看新闻、同事群里聊天,几乎到处都能看到用大模型写周报、做PPT、改Bug的真实案例。但我也发现一个很有意思的现象:不少人注册了账号、打开对话框,问了几天之后得出结论——&q…

2026/10/20 16:41:43 阅读更多 →
XSS跨站脚本攻击:原理、类型与防护实践

XSS跨站脚本攻击:原理、类型与防护实践

1. 项目概述1.1 从一次弹窗开始认识XSS你可能见过这种场面:某天打开一个博客,看到一个页面弹窗,上面写着“你的Cookie已泄露”。很多同学第一反应觉得是恶作剧,但实际上这就是跨站脚本攻击的经典演示。XSS的全称是Cross-Site Scri…

2026/10/20 16:41:43 阅读更多 →
722篇数学成果目录深度拆解:分类逻辑、筛选标准与追踪方法

722篇数学成果目录深度拆解:分类逻辑、筛选标准与追踪方法

1. 这份722篇数学成果目录到底意味着什么 第一次看到“722篇数学成果目录”这个说法,我的直觉是:这不是一份普通的论文列表,而更像是一次集中式的成果归档。722这个数字本身就很有意思——它既不是几十篇那种小规模的技术报告,也不…

2026/10/20 16:40:33 阅读更多 →

最新新闻

自考论文降AI率实战:智能体改写与人工复核全流程

自考论文降AI率实战:智能体改写与人工复核全流程

自考论文写到提交前,最让人血压升高的往往不是查重率,而是学校突然要求提交一份AI检测报告。A同学就是这种状况:论文初稿在查重系统里已经降到合格线,结果学院的通知里多了一句“AI疑似率不得超过20%”。他拿自己的稿子去测了一下…

2026/10/20 17:32:04 阅读更多 →
写论文软件怎么选?宏智树AI如何让论文生活化落地

写论文软件怎么选?宏智树AI如何让论文生活化落地

深夜十一点,手机上弹出一条消息:“学长,写论文软件哪个好?我快被开题逼疯了。”我盯着屏幕看了几秒,想到手机里躺着的那十几个写作工具 App,一时间竟不知道该怎么回答。“好用”这两个字,在不同…

2026/10/20 17:32:04 阅读更多 →
GPT-6全面推送实测:AI在对话中生成可交互界面,开启应用新形态

GPT-6全面推送实测:AI在对话中生成可交互界面,开启应用新形态

GPT-6 全面推送这事儿,我是周二早上刷到消息的。第一反应是又有人在抢跑造势,结果打开自己的对话界面,模型选择器里确实多了一个新名字,切换过去直接能用。更让我意外的是,我那个很久没登录的免费账号也在这个批次里&a…

2026/10/20 17:32:04 阅读更多 →
Simulink双馈感应电机有功无功功率解耦控制仿真全解析

Simulink双馈感应电机有功无功功率解耦控制仿真全解析

学Simulink——风电电机控制场景实例:基于Simulink的DFIG有功/无功功率解耦控制仿真搞风电控制的人,迟早都会撞上DFIG这个名字。双馈感应发电机(Doubly-Fed Induction Generator)在风电领域占了相当大的份额,原因很简单…

2026/10/20 17:32:04 阅读更多 →
AI应用开发避坑指南:Token成本控制与接口稳定性实战

AI应用开发避坑指南:Token成本控制与接口稳定性实战

做 AI 应用头三个月,我踩的最大的坑不是模型选型,也不是提示词调优,而是账单和接口这两件看起来特别"运维"的事。上线第一周,一个日活不到两千的小工具,因为一段没做长度限制的对话历史,单日 Tok…

2026/10/20 17:32:04 阅读更多 →
ChatGPT 深度解析:从对话式 AI 原理到应用场景的完整认知框架

ChatGPT 深度解析:从对话式 AI 原理到应用场景的完整认知框架

ChatGPT 这个词在过去两年几乎被说烂了。但坦白讲,很多人把它当成一个“高级搜索框”,用它查资料、写周报、生成代码,用完就关。这其实远远低估了它背后代表的对话式 AI 的完整能力。真正把 ChatGPT 当生产力工具用起来的人,会知道…

2026/10/20 17:31:04 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →