不依赖框架:用Python和NumPy从零实现AI工程全流程
很多做AI的同行应该都有过这种体验模型在笔记本上跑得好好的精度也达标了但一到别人手里就各种报错或者调了半天参数损失函数纹丝不动最后发现是数据预处理出了问题。说白了市面上会调包、会调参的人一大把真正能把AI工程从头到尾想明白、做明白的人其实没那么多。我这次想聊的这个项目——ai-engineering-from-scratch它的核心思路特别朴素不依赖现成的深度学习框架用最基础的Python和NumPy把数据加载、模型构建、训练、评估、部署这条完整链路一层一层亲手搭建起来。如果你看够了框架帮你隐藏的魔法想从原理层面真正理解AI工程的每一个环节那这份从零开始的路子值得花点时间钻进去。1. from scratch到底意味着什么先把这个项目的理念掰开揉碎1.1 不装框架不调API把每一层魔法都拆开看很多初学者接触深度学习第一步是安装PyTorch或者TensorFlow然后用几行代码调用nn.Linear、model.fit()训练就开始了。这种模式本身没有问题生产环境里我也天天这么干。但问题在于如果所有环节都停留在API层面遇到loss不降、梯度异常、显存溢出这类问题很多人就只能靠搜索引擎碰运气因为完全看不到框架掩盖起来的内部逻辑。from scratch项目解决的就是这个痛点。它要求你用NumPy手写线性层、激活函数、损失函数手动实现反向传播自己构造数据批处理迭代器甚至自己写评估指标的计算逻辑。听起来工程量不小但这恰恰是AI工程能力的分水岭——你亲手实现过一次你才真正理解矩阵乘法在神经网络里是怎么流动的梯度为什么会有消失问题学习率为什么不能乱调模型保存时到底应该存哪些参数。作为参考这套思路和早年间我们用C手写BP神经网络的经历很像那个年代根本没有自动微分所有梯度公式都要自己推导、自己编码。今天虽然工具链成熟了但这种亲手构建的路径反而更稀缺了也更值钱。1.2 这个项目适合哪类人以及需要什么前置底子先说适合谁你如果是刚接触AI的入门者但不再满足于照着教程敲代码而想知道每一步背后的数学和工程逻辑这份路线很适合你你如果是工作一两年的算法工程师手上有业务模型经验但总感觉底子不够扎实遇到深水区的问题容易心虚那从这里补课也相当对症甚至你如果是搞传统软件工程、想转行进入AI领域的开发者通过这个项目建立起数据-模型-训练-评测-部署的整体视图会比你直接啃框架文档高效得多。不过我得说句实在话完全零基础直接冲这个项目会比较吃力。你至少需要三点前置基础——第一Python基本语法要过关至少能看懂类、函数、列表推导式这些常见写法第二高等数学里的导数和链式法则需要捡起来哪怕不熟练看到一个求导式子不能完全懵第三一点线性代数的感觉矩阵乘法、转置、形状匹配这些是你天天要打交道的。没有这三个基础就硬上容易在第一周就弃坑因为你会发现自己卡住的不是工程问题而是数学基础。1.3 AI工程和算法研究不是一回事AI engineering这个词这两年热度很高但很多人还是把它和算法研究混为一谈。我个人的理解是算法研究的核心是在探索新模型、新结构、新损失函数论文复现和学术创新是中心而AI工程的核心是把模型放进真实系统里稳定运行让它可靠、可维护、可观测。这个项目既然叫engineering from scratch它侧重的就不仅仅是模型本身还包括数据管道怎么搭、训练流程怎么组织、模型怎么导出怎么部署、上线之后怎么监控这些内容全部涵盖在内。换句话说你跟着这份路线走完得到的不是一篇论文的复现能力而是一套完整的构建真实AI系统的工程能力。你在面试中能把从数据到模型再到服务全链路讲清楚这比会背几个算法名词要有说服力得多。2. 技术选型背后的逻辑为什么是Python加NumPy2.1 用最朴素的工具暴露最核心的复杂度有人会问做AI工程直接用PyTorch不就完了手写NumPy不是在浪费时间吗这个问题我在刚接触这个项目时也纠结过。但真正动手之后我想通了一个道理当你用PyTorch时一行model.backward()就把梯度算完了你根本看不到梯度是如何逐层回传的而当你用NumPy手写线性层时你需要自己写dW X.T.dot(d_out)、db np.sum(d_out, axis0)参数的形状怎么变化、梯度从哪里来全部暴露在你面前。我认为这种刻意绕远路的价值恰恰在于暴露复杂度。你亲手把全连接网络的三层反向传播写一遍再遇到ResNet的梯度流理解起来会快很多。更关键的是当你在手写环境下把某个环节搞清楚了再回头用框架时你对每一步操作背后的开销和风险都有数。例如你会知道一个不恰当的view操作可能打乱梯度的空间结构这在调试时就是致命的线索。2.2 从手写环境迁移到生产框架的桥接阶段我也见过另外一种走进极端的同学一个人和NumPy死磕到底非要连卷积、BatchNorm、注意力机制全都手写一遍才肯碰框架。我的态度是没必要。手写的目的不是替代框架而是理解框架。你手写了全连接层和反向传播之后就应该尽快桥接到PyTorch或TensorFlow上把算好的梯度结果和框架输出的梯度直接比对数值接近就说明你的理解是对的。这个项目比较好的点在于它虽然以from scratch为主线但在每个模块的配套内容中也都给出了和现有框架的对照。比如手写softmax交叉熵之后会引导你对比PyTorch里的nn.CrossEntropyLoss观察它的label smoothing、class weight这些细节。这种先手写再对照的学习方式能让你的知识既扎实又不脱离生产环境。2.3 核心依赖清单和版本管理经验实操层面做这个项目建议使用一个干净的虚拟环境依赖项其实不多Python 3.8到3.10左右都行NumPy版本保持1.21到1.24这个区间Matplotlib用来画损失曲线scikit-learn用来生成模拟数据集或调用一些评估函数pandas在处理结构化数据时用到。不要一上来就安装一堆重框架它们反而会掩盖你对基础逻辑的理解。版本这里特别提醒一下NumPy较新的版本比如1.26以上对Python版本有要求如果不匹配会出现安装不了或者导入报错的问题。老实说我在踩了两次环境坑之后学会了一招先把Python版本锁定再创建环境最后安装固定版本的NumPy不要图省事直接pip install numpy装最新版生产环境里这种随意性会害人。3. 跟着项目走一遍从数据到部署的完整工程闭环3.1 第一步手写前向传播和反向传播纸上推导比敲代码更重要这应该是整个项目里最劝退、也最值钱的一段。我的经验是先别急着写代码先拿一张小网络在纸上把前向、损失、反向推导一遍。比如构建一个两层网络输入层3个维度、隐藏层4个神经元、输出层2个维度激活函数用sigmoid损失用均方误差。手动算出每个参数的梯度然后用这个梯度结果作为测试用例。等纸上推导没问题了再开始写代码。我用一个非常小的数据点比如只有1个样本、2个特征跑前向和反向打印每一层的cache和grad形状核对是否和推导时一致。这个极小测试法相当管用——数据量越小人工核对越容易模型跑通了再放大数据。反向传播这个环节容易出错的地方主要是矩阵乘法的维度匹配。代码里经常出现两个矩阵形状是反的dot运算报错很多人下意识改一下转置就完事但这其实是治标不治本。正确做法是在张量每一层都加上形状断言检查测试时故意构造异常数据看断言能否正确触发确保各个环节都在掌控之中。3.2 第二步构建训练循环你的第一个AI训练器有了模型前向和反向之后训练循环就是一个标准套路了大致流程是按批次迭代训练数据前向传播计算预测值和损失反向传播计算参数梯度用优化器哪怕是手动实现的最简单的SGD更新参数定期在验证集上计算指标。我在实际带项目时特别强调记录每个批次的loss走向画出曲线不追求漂亮但一定要能看到loss在下降。如果loss不下降或者下降了一会儿就卡住这里头的问题往往不在代码逻辑而在数据没做归一化、学习率过大过小、激活函数选错、权重初始化不善这些非代码因素。说到权重初始化我顺手分享一个经验手写NumPy网络时千万别用np.random.randn直接做初始权重就开训。你一旦用了标准正态分布在深层网络里很远就能看到梯度消失的迹象如果换成Xavier初始化的思路让权重方差根据输入输出维度做一个缩放训练稳定性会好很多这也是一个从理论到工程的重要过渡。3.3 第三步数据工程真正决定你模型上限的地方模型只是整个AI工程里的一环数据才决定天花板。这个项目舍得在数据这块花比较多的笔墨我挺认可的。完整的数据管线至少包括采集或读取、清洗、转换、切分、批次供给。实际工作中真正花时间的恰恰是数据清洗。我见过几位同学在自己的项目里用pandas读取CSV后不做任何检查直接丢进模型训练。等到loss乱跳、指标诡异最后发现是数据里有大量缺失值和异常值甚至标签都串行了。这个锅不该让模型背。一个合格的数据预处理模板大致要有这几个步骤检查数据文件大小和行数是否和预期一致查看每列缺失值比例缺失过多的列直接丢弃缺失不严重的考虑均值填充或模型预测填充检查标签分布如果极度不均衡后面评估指标可能根本不能用accuracy做特征缩放如StandardScaler把不同量纲的特征压缩到相似范围划分训练集、验证集、测试集注意类别分布要尽量一致。数据划分这里有个常见的坑小数据集切分时如果随机种子没固定每次跑出来的结果都不一样你根本没法判断模型改动是不是有效果。固定一个随机种子比如42或2024这个习惯要在项目一开始就养成不然之后的对比实验全不可信。3.4 第四步评估、保存与部署从训练环境到生产环境的跨栏模型训练完很多人就认为项目结束了这其实只完成了一半。评估阶段要做的不是看一眼测试集准确率就完事。你要根据业务场景选择合适的指标二分类问题看准确率有时候会被类别不平衡骗到precision、recall、F1都要去算回归问题则要看MAE和RMSE并关注预测误差在不同取值区间的分布。模型保存这个环节手写环境里没有那么多的黑魔法无非是把训练好的参数以np.save或者pickle的形式存下来。但关键是要把参数结构的顺序也一并记录好否则恢复模型时对不上。我习惯用一个JSON配置文件存模型结构描述再加一个.npz文件存所有参数这样下次重建模型时直接从配置和参数文件还原即可。部署这块如果你有机会走得更远可以尝试把训练好的模型用ONNX导出再通过ONNX Runtime在Web端做推理服务。当然手写环境里直接做ONNX导出会有些折腾我的建议是先把推理逻辑封装成一个类输入原始数据输出预测结果这个类就是未来服务化的最小可用单元。把这条路走通你就有了从训练到推理的完整视野后面无论是做API还是做批处理都只是在这个骨架外面套壳而已。4. 实操高频问题排查这些坑我替你踩过了4.1 损失不下降先检查数据再检查梯度这大概是新手问得最多的问题。很多人第一反应是调学习率、换优化器、加网络层数但这种盲调成功率低得可怜。我自己定的排查顺序是先用极小的数据集比如32个样本尝试过拟合如果loss能降到接近0说明模型和梯度逻辑基本是通的问题大概率在数据管线或训练配置上如果连小数据都过拟合不动那就要查前向传播里的数值是否异常比如输入是否包含NaN、权重是否初始化得太极端。第二个排查点是梯度本身。你可以用数值梯度法验证手动实现的反向传播是否正确具体做法是对某个参数W[i,j]加一个微小扰动epsilon计算(loss(Weps) - loss(W-eps)) / (2 * eps)把它和你的解析梯度对比如果误差在1e-4量级以内说明反向传播是对的。这个方法虽然慢但它是排查梯度bug的黄金标准。4.2 训练误差和验证误差背离正确对待过拟合问题在训练集上loss很低验证集上一塌糊涂这是典型的过拟合。原本的传统教学常常会说减少模型容量加正则化但我建议大家用一个更工程化的视角去看它。首先你要检查训练集和验证集的划分是否出了问题比如有数据泄露验证集和训练集有重叠或者时间序列数据没有按时间切分这类数据泄露造成的虚高非常常见。排除掉数据问题之后才是模型层面的调整。手写环境下我习惯先观察loss曲线的形态训练loss平稳下降、验证loss先降后升说明模型正在从欠拟合走向过拟合此时应该提前停止训练。在此基础上再考虑dropout或L2正则化。另外我也建议用交叉验证来评估模型稳定性尤其是小数据集上单次划分的运气成分太大用5折交叉验证得到的指标才比较靠谱。4.3 梯度消失与爆炸从参数初始化到激活函数选型手写多层网络时梯度消失几乎是必然碰壁的关卡。如果隐藏层用了sigmoid作为激活函数你会看到浅层的权重梯度小得可怜几乎不更新。因为sigmoid导数最大值只有0.25链式法则一乘浅层梯度指数级衰减。解决方案不外乎这么几条换用ReLU或者LeakyReLU训练之前做输入归一化用合理的参数初始化方法实在不行就加残差连接。我在这个项目里实践的通用建议是默认隐藏层用ReLU输出层根据任务类型灵活换分类问题用softmax回归问题用线性输出。这个组合能省掉你未来产生的大多数梯度问题。4.4 环境与依赖管理再好的代码也要能跑起来才算数跟模型问题相比环境和依赖问题不算高深但毁人于无形。我在实际项目里吃了不少亏之后现在固守几条原则每个项目都要独立的虚拟环境依赖文件必须锁版本写完代码后立刻测试从零安装的可行性。具体操作上conda和pip各有千秋。我个人建议用conda create -n ai-from-scratch python3.10建环境然后用pip freeze导出版本清单定期检查环境可用性。有一个坑特别提醒不要同时在conda和pip里混合装包容易出现版本解析冲突尤其是NumPy这种底层库一旦被降级一堆包的隐性问题全部冒出来。5. 从能跑到能上线AI工程化的进阶台阶5.1 可复现性管理随机种子、配置文件和实验记录from scratch项目做到后期你应该开始关注可复现性。AI工程和写普通软件最大的不同在于模型训练里充满了随机性随机初始化、随机打乱、随机采样。没有一套可复现管理机制你实习时调好的模型你走了之后别人根本复现不出来。我建议项目从一开始就建立一个配置字典把随机种子、学习率、批次大小、网络层数、隐藏维度、正则化系数全部集中管理。训练开始时把这份配置连同Git提交号一起记录到训练日志里。这样每一次实验你都知道它对应的精确环境。不要小看这个习惯它会在你一个月后回头分析实验数据时救你于水火。5.2 模型测试与线上验证模型在实验室里好用并不代表一切模型上线不只是写个接口那么简单。你要测试的是模型面对真实流量的表现而且还要时刻关注劣化问题。所以在评估阶段我的做法是把模型输出的历史结果也保存一份不断回流做环比看看指标是否因为业务变化或者数据漂移而恶化。这已经超出了单纯训练员的范畴正是AI工程里工程二字的重量所在。另外一个容易被忽略的点是推理性能。同样一个模型本地跑没问题但放到线上服务里要求毫秒级响应就需要做模型量化、剪枝、知识蒸馏。这个项目虽然以from scratch为核心但如果能预留这部分内容的思考空间你会发现自己从算法工程师到真正的AI工程师的转变正在发生。5.3 单人项目到多人协作的转变独立完成from scratch项目是一个人的修行但在真实工作中AI工程永远是团队协作。我强烈建议你在完成这个项目的主体功能后把它以文档和模块为单位重新整理一遍——每个模块要做到输入输出清晰、互相解耦让另一个人拿到代码后不需要你解释就能跑通。这里面有一点我很看重代码注释不仅要写做了什么还要写为什么这么做。比如你手写反向传播时某个转置操作特别别扭你在注释里写下这里转置是因为batch维度的梯度在矩阵乘法中需要对齐这是给未来的自己留的财富。等到代码可以被别人顺畅阅读的时候你就不是在写练习项目了你就是在做工程。我自己带团队面试时最看重的也是这类项目经历。不是因为代码写得多么惊艳而是from scratch的完整经历代表了一种学习深度——能把复杂的事情讲清楚能在出错时不靠文档靠原理去定位问题这种能力是框架教程喂不出来的。顺着这个方向如果你手头的目的是求职我还建议把项目做成系列先展示手写全连接网络的完整代码和曲线再展示如何迁移到已有框架最后展示如何把训练好的模型包装成API接口。这三步连起来就是一份非常完整的AI工程能力画像。最后分享一个我自己在实践中的体会这个项目最难的其实不是那些数学公式而是你愿意在浮躁的环境里静下心来把一个概念从原理到工程全部打通。手写一次反向传播跑步一次完整训练流程它在未来给你回报的方式是你调试任何模型时那种我大概知道问题出在哪的底气。如果你身边也有想入行AI或者想补底子的朋友把这份从零开始的经验转给他他会感谢你的。

相关新闻

零基础学Java:从环境配置到小项目实战的完整路径

零基础学Java:从环境配置到小项目实战的完整路径

简介:这份资源是韩顺平「循序渐进学Java零基础」课程的完整笔记PDF,面向零基础或刚入门Java编程的学习者,帮助其系统建立Java知识体系并了解实际就业方向。笔记按三个阶段组织:阶段一讲解Java语法、数据类型、控制结构与类对象等基…

2026/10/15 22:15:49 阅读更多 →
ASRock H77 Pro4-M 主板 coreboot 移植支持指南:规格、刷写与硬件监控

ASRock H77 Pro4-M 主板 coreboot 移植支持指南:规格、刷写与硬件监控

固件嵌入式操作系统驱动开发 【免费下载链接】coreboot Read-only mirror of https://review.coreboot.org/coreboot.git. Synced every hour. We dont handle Pull Requests. 项目地址: https://gitcode.com/gh_mirrors/co/coreboot 点击查看 免费下载 本文以 cor…

2026/10/15 22:15:49 阅读更多 →
基于 puppeteer-extra-plugin-stealth 的 `_template` 模板开发自定义反检测插件实战指南

基于 puppeteer-extra-plugin-stealth 的 `_template` 模板开发自定义反检测插件实战指南

网页爬虫浏览器控制测试 【免费下载链接】puppeteer-extra 💯 Teach puppeteer new tricks through plugins. 项目地址: https://gitcode.com/gh_mirrors/pu/puppeteer-extra 点击查看 免费下载 本文以 packages/puppeteer-extra-plugin-stealth/evasio…

2026/10/15 22:15:49 阅读更多 →

最新新闻

VS2017 MFC打包部署实战:解决0xc000007b与DLL缺失问题

VS2017 MFC打包部署实战:解决0xc000007b与DLL缺失问题

1. 项目概述:为什么MFC打包部署至今仍是硬需求在某高校实验室带学生做工业控制界面开发时,我连续三年遇到同一个问题:学生写完功能完整的MFC程序,一到老师验收环节就卡在“打不开”——不是提示缺少MSVCP140.dll,就是报…

2026/10/15 22:58:24 阅读更多 →
STM32 ADC多通道采集必须用DMA的原理与实战

STM32 ADC多通道采集必须用DMA的原理与实战

简介:本资源是一份面向STM32F4系列嵌入式开发者的ADC多通道采集实战工程,聚焦模拟信号高速、低负载采集场景,特别适用于传感器阵列监测、工业数据采集等需兼顾实时性与CPU效率的应用。项目完整实现ADC多通道轮询配置、DMA自动搬运及传输完成中…

2026/10/15 22:58:24 阅读更多 →
上下文工程实战:从提示词优化到信息架构的完整指南

上下文工程实战:从提示词优化到信息架构的完整指南

1. 上下文工程到底在解决什么问题第一次听到“上下文工程”这个词,很多人会下意识觉得它只是“提示词优化”换了个马甲。但真上手做过几个基于大模型的应用之后,你会发现这两件事根本不在一个层面上。提示词优化关注的是“这一句话怎么写才让模型答得更好…

2026/10/15 22:58:24 阅读更多 →
ResNet残差连接原理与PyTorch实现详解

ResNet残差连接原理与PyTorch实现详解

1. 项目概述:为什么ResNet不是“又一个CNN”,而是深度学习的分水岭ResNet的pytorch实现与解析——这八个字背后,藏着过去十年最硬核的一次模型架构突破。我带过不少刚接触CV的新手,他们第一次看到ResNet论文里那张“50层、101层甚…

2026/10/15 22:58:24 阅读更多 →
企业数据安全防护:零信任架构与行为分析实践

企业数据安全防护:零信任架构与行为分析实践

1. 企业数据安全现状与挑战去年某跨国零售企业遭遇的内部数据泄露事件,让整个行业都倒吸一口凉气——一位离职工程师利用未及时撤销的访问权限,带走了超过200万客户的消费记录。这起事件暴露出一个残酷现实:最危险的安全威胁往往来自企业内部…

2026/10/15 22:58:23 阅读更多 →
C语言笔试算法18题:内存与指针驱动的闭环训练体系

C语言笔试算法18题:内存与指针驱动的闭环训练体系

1. 这不是题库搬运,而是一套可闭环复用的C语言算法训练体系“18个笔试考试算法 C语言”——看到这个标题,很多人第一反应是:又一个刷题合集?点开就背代码?先别急着划走。我带过几十届校招辅导班,也参与过多…

2026/10/15 22:57:23 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练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/15 9:49:14 阅读更多 →