从零手写大语言模型:Happy-LLM 源码级教程核心拆解
简介《Happy-LLM从零开始的大语言模型原理与实践教程》由Datawhale社区发起是一份系统学习大语言模型的PDF资料适合已掌握Python基础、希望深入理解Transformer与预训练机制并渴望亲手完成大模型项目的学习者。教程按章节层层递进第1章从NLP基础知识入手涵盖分词、词向量等核心概念后续章节深入剖析Transformer架构中的自注意力机制、Encoder-Decoder结构与预训练语言模型原理并详细演示如何从零准备数据、训练Tokenizer、搭建模型最终实现并训练一个完整的LLaMA2模型。在此基础上教程还介绍了LoRA/QLoRA高效微调、RAG检索增强生成和Agent智能体等实战应用场景使读者能够将原理转化为真实可用的解决方案。资源共1个PDF文件大小19.06MB目录结构清晰既有理论推导也有完整代码示例并配有实战案例目前已有555人学习是深度学习入门后进阶LLM方向的实用参考资料。1. Happy-LLM 是什么一本不带你调 API、带你拆源码的 LLM 手册很多人学大语言模型不是卡在数学上而是卡在「从哪一行代码开始」。市面上的资料要么把 Transformer 画成一张大图然后戛然而止要么直接教你怎么调封装好的模型接口跑通之后脑子里仍然是一片空白。Happy-LLM 这本从零开始的大语言模型原理与实践教程 PDF 的定位正好卡在中间它不替你省掉原理也不让你停留在原理而是把「这个 token 是怎么来的」「这层矩阵乘法在算什么」「训练时 loss 掉到多少算正常」讲成一条可以动手验证的线。适合三类人被源码劝退的工程师、刚转 NLP 方向的学生、以及用过模型但想弄清内部机制的人。前提是你愿意动手敲代码而不是只把 PDF 当科普读物。2. 打开 PDF 之前把「最小闭环」四个字先焊进脑子里2.1 先看目录再动手一本从零教程该覆盖哪些模块拿到 PDF 不要急着从第一页往后读。我一般会先翻目录确认它是否覆盖了四个模块Tokenizer文本怎么变成数字、模型结构数字怎么变成向量再变成概率、训练流程概率怎么被优化、推理部署训练好的权重怎么生成新文本。这四块缺一块教程学完你都没法独立复现出「从零训练一个能说话的模型」这条完整链路。Happy-LLM 这类从零教程的典型目录结构如下模块常见章节读完应该回答的问题数据侧Tokenizer、词表构建、数据切片一句话是怎么变成一串整数 id 的结构侧Embedding、注意力、前馈网络、层归一化张量从输入到输出的形状变化是怎样的训练侧损失函数、优化器、学习率、微调一个 batch 的 loss 是怎么算出来并回传的推理侧自回归生成、采样策略、KV cache模型生成第一个 token 和后续 token 的区别在哪如果目录里这些模块都有教程的完整度是够的如果只有模型结构而没讲 tokenizer 和数据切片你大概率会在自己造数据时卡住。读教程之前花十分钟摸清目录结构能帮你决定哪些章节值得精读、哪些可以略读避免把时间耗在「看完原理却不知道代码在哪」的章节上。2.2 前置知识自测数学要补到什么程度、Python 要会到哪很多人被「从零开始」四个字误导以为不需要任何基础。实际上 Happy-LLM 这类教程默认你具备以下能力缺的可以在读的过程中边用边补但心里要有数线性代数会做矩阵乘法、知道 softmax 的作用、知道张量 shape 的变换规则。Transformer 里全是矩阵运算shape 对不上就会报错。概率论基础理解条件概率、交叉熵的含义。语言模型本质是在建模「下一个 token 的概率分布」。Python会写类、会使用生成器、能看懂装饰器更佳。教程里的数据处理环节离不开这三样。命令行的基本操作能建虚拟环境、能装包、会用简单的显存查看命令。我的建议是不要先花两个月补数学再看教程那样大概率会放弃。正确做法是先跑起一个最小例子遇到不理解的数学符号时再回头查。比如看到「注意力分数 QK^T / sqrt(d)」时你只需要知道它在算「两个 token 之间的相关性」至于为什么要除以根号 d可以等第一次训练出现梯度异常时再深入理解那时候印象会深得多。2.3 最小闭环拆解从一段文本到一个新 token 需要几步把「从零开始」拆到不能再拆最小闭环是六步输入文本 → 切分成子词 → 映射成 id → 查 embedding 表得到向量序列 → 经过若干层 Transformer 计算 → 输出一个概率分布并采样出下一个 token。这个过程在推理阶段是单向的在训练阶段则是把「采样出的 token」替换成「真实的下一个 token」来算损失。这六步里有四个「黑匣子」是新手最容易忽略的子词切分规则为什么「playing」会被切成「play」和「ing」、embedding 表里每行向量起初是随机值、Transformer 层里每层都有一组权重需要训练、最后的概率分布形状等于词表大小。你要做的第一件事不是理解每一步的数学细节而是把每一步的输入输出形状写下来。例如输入一句话tokenizer 输出一个 id 列表embedding 层把每个 id 变成 512 维向量Transformer 层保持序列长度和维度不变输出层的矩阵形状是「序列长度 × 词表大小」。形状搞清楚了整个模型在你眼里就不是黑匣子而是一条数据管道。3. 原理主线Tokenizer、Embedding 与 Transformer 的三层拆解3.1 Tokenizer 不是分词器子词切分与词表大小的工程权衡Tokenizer 是绝大多数人学 LLM 时的第一道坎因为它不是「按标点切分」那么简单。主流做法是子词切分常见算法是 BPEByte-Pair Encoding不断把出现频率最高的相邻字节对合并成一个新符号直到词表达到预设大小。这样做的直接收益是词表里不需要穷举所有单词生僻词可以被拆成多个子词组合既控制了词表规模又减少了很多「词典外」问题。词表设多大需要权衡。词表太小比如 8K会导致常用词被拆得很碎序列变长计算量变大词表太大比如 100K会让 embedding 层和输出层的矩阵巨大显存暴涨而大部分词可能只出现很少几次学不到有效表示。Happy-LLM 这类教程给出的典型实验配置是 32K 左右这个规模在显存和数据量之间比较均衡。中文场景还要额外注意中文不像英文天然带空格切分子词时往往以汉字或字节为最小单位词表里会混入大量单字这会导致序列长度偏长训练时要把最大序列长度这个超参数留出余量。3.2 Embedding 与位置编码模型凭什么知道词的顺序Embedding 层做的事情本质上是查表每个 token id 对应一行可训练向量初始值是随机噪声训练后语义相近的 token 在向量空间里的方向也会相近。但要理解模型如何处理语序必须明白一个关键点Transformer 的自注意力机制本身对位置不敏感把「我爱你」换成「你爱我」token 级别的注意力计算结果是完全一样的。所以模型必须额外注入位置信息这就是位置编码存在的原因。位置编码有两种常见思路绝对位置编码用固定函数生成每个位置唯一的向量加在词向量上和相对位置编码在注意力计算时直接约束两个 token 之间的距离关系。现在很多模型用旋转位置编码这类相对位置方案它对序列长度外推更友好。理解到这一层你就掌握了排查问题的一个关键点如果模型生成的长文本语义混乱但短文本正常大概率是位置编码在超过训练长度的位置失效了这是位置编码和训练数据长度共同决定的不是模型结构有 bug。3.3 Transformer 五个必会组件注意力为什么不能没有掩码Transformer 堆叠结构在代码里由五个必会组件构成排查模型问题时你基本都是在跟这五个组件打交道自注意力层计算每个 token 与其他所有 token 的相关性输出是加权求和后的向量。多头机制把注意力计算拆成多个头并行做每个头关注不同维度的关系最后拼回去。前馈网络对每个 token 的向量做两次线性变换加激活函数是参数最多的部分。层归一化对每个 token 的向量做归一化稳定训练过程。残差连接把输入直接加到输出上解决深层网络梯度消失问题。掩码是新手最容易忽略的细节。在自回归语言模型里训练时预测第 i 个 token 时不能让模型看到第 i 个之后的 token所以注意力分数矩阵里需要把「未来位置」遮成负无穷这就是因果掩码。另一个容易踩坑的是 padding 掩码一个 batch 里句子长短不一短句补上的 padding 位置不应参与注意力计算否则会引入噪声。很多「从零实现 Transformer」的教程代码里只做了因果掩码而漏了 padding 掩码训练时 loss 会异常波动不仔细查根本发现不了。注意力机制的时间复杂度是序列长度的平方序列翻倍计算量翻四倍。这也是为什么教程里的最大序列长度一般都设得很小128 或 256也解释了推理时为什么需要 KV cache把历史 token 的键值缓存下来生成新 token 时只需要算新位置而不是把整个序列重新算一遍。理解了这个复杂度来源你就能解释后续章节里出现的所有显存问题——八成和序列长度有关。4. 实践主线用单卡把一个 10M 参数的玩具模型跑通4.1 环境与依赖先固定 Python 版本与深度学习框架再谈显卡实践环节的第一件事不是写模型而是把环境固定下来。很多从零教程翻车都发生在环境不一致上同一份代码在 A 机器能跑在 B 机器报算子错误。我的习惯是第一步创建虚拟环境并锁定 Python 版本避免系统自带的 Python 和项目依赖互相污染# 创建 Python 3.10 虚拟环境名字叫 happy-llm python3.10 -m venv happy-llm-env # 激活环境Windows 下用 happy-llm-env\Scripts\activate source happy-llm-env/bin/activate # 升级 pip 后安装核心依赖深度学习框架、数据处理工具 pip install --upgrade pip pip install torch pip install transformers pip install numpy逻辑说明虚拟环境是隔离项目依赖的基本手段避免多个项目之间因为包版本冲突互相影响。torch 是模型训练和推理的核心框架transformers 在本教程里不是用来直接调预训练模型的而是借它的基础组件比如分词器接口学习底层实现。参数说明Python 版本选 3.10 或 3.11 主要是为了兼容当前主流框架版本太老的版本会出现部分算子缺失。如果机器有 GPU装 torch 前先确认驱动支持的 CUDA 版本再按对应版本安装否则模型训练会掉到 CPU 上速度慢到无法忍受。确认 GPU 可用后运行下面的命令做一次「体检」# 打印 torch 版本、是否可用 CUDA、显卡型号与显存 python -c import torch; print(torch.__version__, torch.cuda.is_available(), torch.cuda.get_device_name(0), torch.cuda.get_device_properties(0).total_memory / 1024**3)如果输出里 CUDA 可用是 False先查驱动与 CUDA 版本匹配而不是重装 torch这是最常见的环境坑。4.2 数据准备把语料切片成固定长度样本的通用流程训练语言模型的数据准备核心是「把一个长文本切成固定长度的输入片段每个片段对应一个预测目标」。切法决定了训练样本的质量和数量最常用的做法是滑动窗口切片def build_samples(text, tokenizer, block_size128, stride64): 将长文本按 block_size 切块stride 控制相邻样本的重叠步长。 tokenizer 负责把文本编码成 id 列表。 返回 (input_ids, labels) 列表。 tokens tokenizer.encode(text) # 文本 - id 列表 samples [] for i in range(0, len(tokens) - block_size, stride): chunk tokens[i : i block_size] # 输入序列 target tokens[i 1 : i block_size 1] # 预测目标整体右移一位 samples.append((chunk, target)) return samples逻辑说明语言模型训练的目标是「根据前文预测下一个 token」所以输入是第 1 到第 block_size 个 token标签是第 2 到第 block_size 1 个 token两者恰好错开一位。代码返回的 target 是完整长度实际计算损失时需要处理序列最后一个位置的预测目标要么丢弃要么用下一个样本的开头补齐这是教程里经常被一笔带过但跑起来就出错的地方。参数说明block_size 直接决定显存占用和训练速度128 是玩具模型的合理起点stride 小于 block_size 时相邻样本有重叠能增加样本数但也会让相邻样本高度相关可能造成轻微的过拟合。对一份几百 MB 的纯文本语料我通常先切出样本再按 9:1 划分训练集和验证集验证集不参与训练只用来观察过拟合。如果教程配套的数据集已经帮你切好了也要先确认它的切分方式否则后续 loss 曲线的解读会失真。4.3 训练一个 10M 参数的玩具模型关键超参数与显存估算模型结构建议不要一开始就奔着大模型去从约 10M 参数一千万的小模型开始跑通闭环再逐步加层数。一组经过验证的起点配置如下超参数推荐值说明词表大小4096对玩具语料足够显存占用小嵌入维度128太小表达能力不足太大学得慢层数4两层也能跑通四层梯度更稳定注意力头数4头数要能整除嵌入维度最大序列长度128该长度下注意力计算量较小训练步数例如 2000 步先跑通链路再追求效果学习率3e-3配合预热小模型可以用偏大的学习率用 bash 启动训练时建议先把关键配置写进命令行参数而不是改代码python train.py \ --vocab_size 4096 \ --hidden_dim 128 \ --num_layers 4 \ --num_heads 4 \ --block_size 128 \ --max_steps 2000 \ --batch_size 32 \ --learning_rate 3e-3 \ --warmup_steps 200逻辑说明参数从代码里抽出来的好处是可以对照实验而不用改动逻辑代码。warmup_steps 表示前 200 步学习率从零线性升到设定值这一步对 Transformer 训练稳定性的提升非常明显跳过它 loss 很容易在早期飙升。显存估算上10M 参数模型用 float32 训练占约 40 MB 权重空间加上梯度、优化器状态、中间激活单卡 6G 显存足够跑 block_size 128、batch_size 32 的配置。如果显存紧张优先调小 batch_size 或用梯度累积而不是调小词汇表和序列长度因为后两者直接影响模型的学习能力。当训练日志里验证 loss 不再是「玄学波动」而是稳定下降说明整个链路已经通了可以开始往更大模型推进。5. 从零跑 LLM 的 5 个经典翻车现场排错清单与避坑记录5.1 显存 OOM不是 batch 太大是序列太长现象训练刚开始几步就报显存溢出out of memory第一反应是调小 batch_size但调小之后仍然 OOM。原因新手往往忽略注意力层的显存占用是序列长度的平方。block_size 从 128 调到 256注意力矩阵的显存占用变成 4 倍这比 batch_size 翻倍的影响大得多。解决先缩短 block_size 到 64 确认能跑通再逐步加长。如果必须用长序列采用梯度累积多个小 batch 累积梯度后再更新参数或梯度检查点用计算换显存而不是单纯降低 batch_size。5.2 Loss 不降学习率不是越小越稳现象训练日志里 loss 卡在某个值附近纹丝不动或者前几步 loss 剧烈震荡后直接变成 NaN。原因Transformer 对学习率非常敏感。lr 太大比如 0.1 级别会让梯度更新越过最优点loss 直接发散lr 太小比如 3e-5对玩具模型又可能学不到东西。另一常见原因是没有 warmup训练初期模型权重随机梯度方向不稳定大步长更新会破坏参数。解决先在 lr 3e-4 到 1e-3 范围内做小范围搜索同时务必开启 warmup。如果 loss 一直是 NaN先降低学习率一个数量级验证再检查数据里是否存在 NaN 值或 padding 部分参与计算导致的对数运算异常。5.3 生成了乱码词表与权重不匹配现象模型训练完能输出一些结构完整的话但偶尔夹杂奇怪的符号甚至整体是不可读的乱码。原因最常见的是加载权重时词表对不上——训练用的是词表 A例如自定义 BPE 词表保存权重后加载脚本误用了默认词表 Btoken id 对应的字符完全错位embedding 表自然失效。还有一个隐蔽场景自定义 tokenizer 保存与加载方式不同导致词表顺序改变。解决检查权重保存时是否把 tokenizer 的词表文件一并保存加载时用同一个 tokenizer 实例做推理。在生成测试代码里打印 id 到文本的映射逐一确认前 20 个 id 的还原结果如果前几个就乱不用再怀疑模型本身。5.4 GPU 利用率低数据加载卡在 CPU现象训练时显存占用正常但 GPU 利用率只有百分之十几训练速度远低于预期。原因数据加载线程数没配好每个 batch 都要现做 tokenizer 编码尤其是 BPE 这类较慢的算法CPU 处理数据的速度跟不上 GPU 计算速度GPU 一直在等数据。解决先把数据预先 tokenizer 成 id 并缓存到磁盘训练时直接加载 id 而不是实时处理文本。同时把 DataLoader 的 num_workers 设为 4 或 8并开启预取机制让 GPU 在算当前 batch 时 CPU 已经在准备下一个 batch。5.5 训练一切正常推理却慢得离谱KV cache 与采样参数现象训练时挺快但用模型逐 token 生成文本时速度慢到难以接受生成 100 个字要等很久。原因推理脚本每次生成一个新 token 都把整个输入序列重新过一遍模型没有复用之前算好的键值向量或者采样温度设得极低导致生成结果大量重复并触发了一定的截断逻辑看起来更慢。解决在注意力实现里加入 KV cache生成第 N1 个 token 时只计算新增位置的键值拼接缓存后参与注意力计算。同时确认采样参数合理温度在 0.7 到 1.0 之间重复惩罚不要拉满否则模型会陷入同一个 token 的循环输出。6. 读完教程后的三道进阶验证题检验你是不是真的从零过了6.1 第一道题把 tokenizer 换成另一套方案模型还能收敛吗教程里通常只讲了 BPE 这一种切分方案。读完不要急着翻下一章试着把词表构建换成另一种子词算法比如 Unigram其他超参数保持不动重新训练同一个模型。这道题能验证你是否真正理解了词表大小、序列长度、训练数据这三者的关系。如果模型无法收敛八成是因为你不清楚不同算法对文本切分粒度的差异导致数据里出现了大量未登录 token 或序列长度变化过大。做完这个实验你对 tokenizer 的认知就不再是「调用一个函数」而是能理解它在整个系统里的杠杆作用。6.2 第二道题用相同数据训练两个深度不同的模型对比 loss 曲线分别训练一个 2 层和一个 6 层的模型其他参数保持一致画出两者的训练 loss 和验证 loss 曲线。这道题让你直观体验深网络的拟合能力和过拟合风险层数多的模型训练 loss 降得更低但验证 loss 可能更早反弹。动手做过一次你就不需要别人告诉你「模型不是越大越好」也不容易被「加层数就能涨点」的直觉骗到。记得同时把每个 epoch 的训练时间记下来你会对「参数翻倍训练时间不止翻倍」这件事有切身体会。6.3 第三道题把推理脚本改成流式输出观察首 token 延迟教程里的生成代码往往是「全部算完再打印」。试着改成每生成一个 token 就输出一个字符统计从输入到输出第一个 token 的耗时和后续每个 token 的平均耗时。你会发现首 token 明显更慢因为要处理完整输入序列后续 token 速度大幅提升这就是 KV cache 的实际收益。这道题不需要改模型结构但它能帮你理解真实产品里「首 token 延迟」和「生成速度」这两个指标为什么被分开统计。这三道题全部做完再回去翻目录你会发现自己已经能回答每一章开头的问题。我的习惯是教程跑通后不立刻开启下一个实验先花十分钟复述一遍「刚才这一步在解决什么问题」说不上来就回去重读对应段落这种做法比多读十篇新教程更有用。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Python pywebcopy整站镜像:实现网页离线保存的完整方案

Python pywebcopy整站镜像:实现网页离线保存的完整方案

简介:pywebcopy 是一款用 Python 编写的网页镜像与归档工具,面向需要离线保存网页、网站资源或研究爬虫实现的开发者。它尊重 robots.txt,一次调用即可把 CSS、JS、图片等资产连同页面完整下载,并能重新映射链接、克隆整站&#x…

2026/10/14 2:06:18 阅读更多 →
SO增强与状态修改实战:从ELF结构到Hook技术详解

SO增强与状态修改实战:从ELF结构到Hook技术详解

/* 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 2:06:18 阅读更多 →
无人自助拼豆系统架构设计与落地实战 核心功能开发全指南

无人自助拼豆系统架构设计与落地实战 核心功能开发全指南

无人自助拼豆系统架构设计与落地实战 核心功能开发全指南 随着无人自助业态的普及,手工DIY场景的无人化运营需求持续提升,无人自助拼豆系统通过结合物联网、移动开发、服务端技术,实现了24小时无人值守、用户自助拼团、设备智能管控的完整业务…

2026/10/14 2:06:18 阅读更多 →

最新新闻

Vue 3 轻量级数据透视表组件:支持拖拽+聚合+Excel导出

Vue 3 轻量级数据透视表组件:支持拖拽+聚合+Excel导出

简介:这是一份面向Vue.js中高级开发者的数据透视表功能实现组件包,专为需要在Web应用中快速集成交互式聚合分析表格的前端工程师设计。资源提供两个核心Vue组件:支持拖放配置行列的完整数据透视表,以及轻量级仅聚合功能的PivotTab…

2026/10/14 2:45:28 阅读更多 →
CLRS 习题精解:B 树基本操作(B-TREE-INSERT、查找最值与前驱)与复杂度分析

CLRS 习题精解:B 树基本操作(B-TREE-INSERT、查找最值与前驱)与复杂度分析

文档教程教育 【免费下载链接】CLRS 📚 Solutions to Introduction to Algorithms Third Edition 项目地址: https://gitcode.com/gh_mirrors/clr/CLRS 点击查看 免费下载 本文以《算法导论(第三版)》第 18 章 18.2 节"B 树…

2026/10/14 2:45:28 阅读更多 →
加班后的回程路上,更适合先听完《妈妈,我失业了》

加班后的回程路上,更适合先听完《妈妈,我失业了》

傍晚下班路上,中学生,把耳机音量调到刚好盖住走廊声在便利店门口抽一口冷气再进门。歌词里「走不出了」写的就是这种说不清又不甘心的时刻——《妈妈,我失业了》接住的,正是这截情绪。词曲:小熊歌|演唱&…

2026/10/14 2:45:28 阅读更多 →
【Python实战】基于FastAPI的绿植养护管理系统 - 完整项目

【Python实战】基于FastAPI的绿植养护管理系统 - 完整项目

🥂(❁◡❁)您的点赞👍➕评论📝➕收藏⭐➕关注👀是作者创作的最大动力🤞 💖📕🎉🔥 支持我:点赞👍收藏⭐️留言📝关注👀欢迎…

2026/10/14 2:45:28 阅读更多 →
Cap 开源录屏上手:从依赖自检到发出第一条分享链接

Cap 开源录屏上手:从依赖自检到发出第一条分享链接

Cap 开源录屏上手:从依赖自检到发出第一条分享链接 【免费下载链接】Cap Open source Loom alternative. Beautiful, shareable screen recordings. 项目地址: https://gitcode.com/GitHub_Trending/cap1/Cap 给同事讲一个功能,你得先凑齐三人的日…

2026/10/14 2:45:28 阅读更多 →
单片机毕设选题推荐:基于STM32的婴儿摇篮哭泣尿床监测与环境联动控制系统设计 基于物联网的婴儿床温湿度自动调节与哄睡装置设计(032707)

单片机毕设选题推荐:基于STM32的婴儿摇篮哭泣尿床监测与环境联动控制系统设计 基于物联网的婴儿床温湿度自动调节与哄睡装置设计(032707)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/10/14 2:44:28 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 22:01:27 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →