贝叶斯优化实战:从网格搜索到高效超参数调参

简介:面向机器学习与深度学习实践者的贝叶斯优化实战资源包,聚焦超参数自动化调优这一影响模型性能的关键环节,解决手动试错低效、难以找到最优组合的痛点。包内共4个文件,含两个Python脚本,分别演示贝叶斯优化在ML与DL场景下的完整流程,其中采用的高斯过程代理模型可预测目标函数并指导下一步采样;配套iris.csv与mnist.npz两个经典数据集,从鸢尾花分类到MNIST手写数字识别形成梯度式案例,压缩包约10.96MB,结构轻量清晰,便于快速下载与对照运行。目前已有4393人浏览学习。资源可直接运行代码观察迭代过程,理解采集函数如何在探索未知区域与开发已知最优区域间权衡;同时提供针对支持向量机、随机森林以及神经网络超参数的调参示例,读者可在此基础上替换数据集与模型,将贝叶斯优化迁移到自己的项目中,节省调参时间并提升模型精度。

1. 超参数优化:网格搜索跑三天都嫌慢的场景,贝叶斯优化怎么救场

A同学在某次模型调优比赛里,把学习率从 0.1 到 0.0001 按网格扫了一遍,一组参数训练一个多小时,十几个参数组合跑了整整两天半。等他拿到最优结果,隔壁用贝叶斯优化的同事只跑了四十多组试验,精度还比他高了两个点。那种感受,调过参的人都懂:网格搜索在参数维度一多、每轮训练又贵的时候,组合数直接指数爆炸,而贝叶斯优化用更少的试验次数换来更好的参数组合,已经是深度学习、机器学习项目里绕不开的标准操作。这份《超参数优化:贝叶斯优化.zip》把贝叶斯优化的代理模型、采集函数、完整优化循环打包成了可直接复用的代码,适合正在用手动调参或网格搜索、想切换到贝叶斯优化但又不想从零写公式的 Python 开发者。装好环境、跑通示例,你就能把它接到自己的训练脚本里,告别碰运气式调参。

2. 环境准备:Python 虚拟环境、依赖清单与压缩包目录结构

2.1 解压后的包结构先摸清楚

拿到压缩包第一件事不是急着装依赖,而是先把目录结构看明白。很多人在这一步翻车:解压后直接对着根目录跑pip install -r requirements.txt,结果发现依赖文件在requirements/子目录里,报错报得莫名其妙。

$ unzip 超参数优化:贝叶斯优化.zip -d bayes_opt_lab $ cd bayes_opt_lab $ tree -L 2

我一般会先执行上面两条命令,把压缩包解压到bayes_opt_lab目录,然后用tree看两层目录结构。这套包里通常会有src/(核心优化器代码)、examples/(可直接运行的调参示例)、docs/(说明文档和 API 参考)、tests/(单元测试)以及requirements.txt。这里-d参数指定了解压目标目录,如果不加,压缩包会直接把一堆文件撒在当前目录,后面想清理都难。

2.2 用虚拟环境隔离依赖

贝叶斯优化涉及的依赖比较多,numpy、scipy、scikit-learn 是最基础的,如果做深度学习示例还牵涉到深度学习框架。直接往系统 Python 里装,大概率会跟已有项目打架。我用 Python 的venv模块建一个独立环境,这是最省事也最不容易出错的做法。

$ python3 -m venv bayes_env $ source bayes_env/bin/activate (bayes_env) $ pip install --upgrade pip

注意第一行python3 -m venv指定用系统自带的 Python 3 来创建虚拟环境,bayes_env是环境名,可以随便起。第二行source是激活环境的命令,激活后命令行提示符前面会出现(bayes_env),这说明你现在已经处于虚拟环境内部,后面装的所有包都只进这个环境,不会污染系统 Python。pip install --upgrade pip顺手把 pip 升到最新版,避免老版本 pip 在解析依赖时出现兼容问题。

2.3 依赖安装与版本核对

环境激活后,安装依赖。这一步常见的问题是版本不匹配,比如 numpy 版本过低导致 scikit-learn 导入报错,或者深度学习框架的动态库链接失败。我先建议用 requirements 文件安装,如果失败再逐个排查。

(bayes_env) $ pip install -r requirements.txt (bayes_env) $ python -c "import numpy, scipy, sklearn; print(numpy.__version__, scipy.__version__, sklearn.__version__)"

pip install -r requirements.txt会按照文件里锁定的版本一次性装完所有依赖。装完后的那行python -c是一条验证命令,用于确认三大核心库能否正常导入并打印版本号。这里我特意强调不要跳过验证步骤,因为 pip 显示安装成功不代表导入没问题,某些库的预编译包在特定 Python 版本下会导入失败,这时候就要考虑升级 Python 版本或降级库版本。如果你的项目中还涉及深度学习框架,建议单独安装并再做一次导入测试。

3. 核心模块拆解:代理模型、采集函数与优化循环是怎么协作的

3.1 先看优化器主流程

贝叶斯优化的核心流程并不复杂,关键是几个模块各司其职:代理模型负责拟合已有试验结果,采集函数决定下一步该试哪个参数组合,优化循环把这两者反复迭代。这套包里把主流程封装在src/bayes_opt_core.py里,核心代码逻辑大致如下。

from skopt import Optimizer from skopt.space import Real, Integer, Categorical space = [ Real(1e-4, 1e-1, name="learning_rate", prior="log-uniform"), Integer(32, 256, name="batch_size"), Categorical(["sgd", "adam"], name="optimizer"), ] opt = Optimizer( dimensions=space, base_estimator="GP", acq_func="EI", random_state=42, ) for i in range(30): x_next = opt.ask() y_next = train_evaluate(x_next) opt.tell(x_next, y_next) print(f"Iteration {i+1}: {x_next} -> {y_next:.4f}")

这段代码是贝叶斯优化的标准用法。space定义了参数搜索空间,Real、Integer、Categorical分别对应连续型、整型和离散型超参数。这里的Real(1e-4, 1e-1, name="learning_rate", prior="log-uniform")很关键,prior="log-uniform"表示学习率在 1e-4 到 1e-1 之间按对数均匀分布采样,这是因为学习率在数值跨度上通常跨越多个数量级,线性均匀采样会漏掉小数值区域。base_estimator="GP"表示用高斯过程作为代理模型,acq_func="EI"表示采集函数取期望改进(Expected Improvement)。random_state=42固定随机种子,这是复现结果的前提。主循环里opt.ask()让优化器推荐下一个参数组合,train_evaluate(x_next)是你自己的训练和验证函数,opt.tell()把结果返回给优化器更新代理模型。

3.2 采集函数与代理模型的参数取舍

采集函数的选择直接影响搜索策略。包里把acq_func的候选值封装成了三个:"EI"(期望改进)、"LCB"(置信下界)、"PI"(改进概率)。我一般默认用"EI",因为它在探索与利用之间平衡得比较好,不会像"PI"那样容易陷入局部最优,也不会像"LCB"那样对参数敏感。EI的数学含义是计算当前模型下,某个新点相对当前最优值的期望改进量,改进量为正才值得尝试。另一个参数base_estimator除了默认的"GP"(高斯过程),还可以换"RF"(随机森林)或"ET"(极端随机树)。当参数空间维度较高、试验次数又少时,"RF"或"ET"往往比高斯过程更稳,因为高斯过程在高维空间里协方差矩阵的计算容易出数值问题,特征数量到 20 以上时我会换成"ET",训练速度快且结果也不差。注意,如果你是初次跑通,建议保持"GP"+"EI"的组合,这是官方示例默认搭配,最容易复现预期效果。

3.3 自定义目标函数怎么包装

这套包里examples/下的示例脚本用的是内置测试函数,但实际应用中你要传入自己的模型训练逻辑。包装目标函数时有一个常见的坑:目标函数必须返回一个可比较的标量,且越小越好(默认最小化)。如果你想让结果最大化,比如优化准确率,需要对返回值取负号。

def train_evaluate(params): lr = params[0] batch_size = params[1] opt_name = params[2] val_acc = run_training(lr=lr, batch_size=batch_size, optimizer=opt_name) return -val_acc # 最大化准确率 -> 最小化负准确率

这里params是一个列表,元素顺序与定义space时的顺序一致。run_training是你要自己实现的训练函数,返回验证集准确率。因为优化器默认最小化目标,所以返回-val_acc,这样优化器在最小化负准确率的同时,等效于最大化准确率。还有一点容易忽略:如果训练过程中出现 NaN 或直接抛异常,不要在目标函数里抛错终止整个优化循环,而应该捕获异常并返回一个很大的数值(比如1e9),让优化器自动把这个点视为不可行区域,绕过去继续搜。这个技巧在处理不稳定的深度学习训练时特别实用。

4. 实战调参:机器学习与深度学习两种典型调用姿势

4.1 机器学习场景:XGBoost 超参一键优化

这套包里提供了一个基于 XGBoost 的调参示例,这也是最贴近日常机器学习项目的用法。XGBoost 有n_estimators、max_depth、learning_rate、subsample、colsample_bytree等一堆超参数,手工组合根本试不过来。包里的示例脚本用独立采样器循环实现,核心代码如下。

from skopt import Optimizer from skopt.space import Real, Integer import xgboost as xgb import numpy as np from sklearn.datasets import load_breast_cancer from sklearn.model_selection import cross_val_score data = load_breast_cancer() X, y = data.data, data.target space = [ Integer(50, 300, name="n_estimators"), Integer(3, 10, name="max_depth"), Real(0.01, 0.3, name="learning_rate", prior="log-uniform"), Real(0.5, 1.0, name="subsample"), Real(0.5, 1.0, name="colsample_bytree"), ] def evaluate(params): n_est, depth, lr, subsample, colsample = params model = xgb.XGBClassifier( n_estimators=n_est, max_depth=depth, learning_rate=lr, subsample=subsample, colsample_bytree=colsample, eval_metric="logloss", use_label_encoder=False, verbosity=0, ) scores = cross_val_score(model, X, y, cv=5, scoring="accuracy") return -scores.mean() opt = Optimizer( dimensions=space, base_estimator="ET", acq_func="EI", n_initial_points=5, random_state=42, ) for i in range(25): x = opt.ask() y = evaluate(x) opt.tell(x, y) print(f"Iteration {i+1}: params={x}, acc={-y:.4f}")

我特意把base_estimator换成了"ET",因为这里搜索空间有 5 个维度,而且每轮交叉验证的耗时不算短,极端随机树比高斯过程拟合更快,在试验次数少时也不会牺牲太多精度。cv=5表示交叉验证折数,每次评估要训练 5 个模型,比较贵,所以总迭代次数设在 25 轮。n_initial_points=5表示先随机采样 5 个点做初始填充,让代理模型有一定数据量后再开始贝叶斯更新,这个参数太小会导致早期推荐点比较激进。

4.2 深度学习场景:小 CNN 学习率与 Dropout 的联合搜索

深度学习调参比机器学习更麻烦,训练一次动辄几分钟,参数一多就跑不动。包里的深度学习示例用的是一个小型 CNN 网络,在模拟项目X的图像数据上搜索learning_rate、dropout_rate、batch_size三个参数。核心逻辑与上一节一致,但目标函数内部要做完整的训练循环。

import torch import torch.nn as nn from skopt import Optimizer from skopt.space import Real, Integer class TinyCNN(nn.Module): def __init__(self, dropout_rate): super().__init__() self.conv = nn.Sequential( nn.Conv2d(1, 16, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2), nn.Conv2d(16, 32, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2), ) self.fc = nn.Sequential( nn.Dropout(dropout_rate), nn.Linear(32 * 7 * 7, 10), ) def forward(self, x): x = self.conv(x) x = x.view(x.size(0), -1) return self.fc(x) def train_evaluate(params): lr, dropout_rate, batch_size = params torch.manual_seed(0) model = TinyCNN(dropout_rate=dropout_rate) optimizer = torch.optim.Adam(model.parameters(), lr=lr) criterion = nn.CrossEntropyLoss() try: for epoch in range(10): for xb, yb in train_loader(batch_size): optimizer.zero_grad() out = model(xb) loss = criterion(out, yb) loss.backward() optimizer.step() val_acc = evaluate_model(model) return -val_acc except Exception: return 1e9

这个示例里torch.manual_seed(0)固定的是 PyTorch 的随机种子,保证每次在相同参数下训练结果基本一致。train_loader(batch_size)是示例脚本里封装好的数据加载函数,你实际应用时替换成自己的 DataLoader。注意try...except结构,深度学习中学习率过大经常导致 loss 变成 NaN,如果不捕获异常,整个优化循环会中断,而返回1e9则让优化器知道这个点不可行。batch_size在这个包里被定义为Integer类型,实际它比较特殊,不是越大越好也不是越小越好,贝叶斯优化对这类取值有限且变化不连续的参数处理能力有限,后面避坑章节我会细说。

4.3 收敛判断与资源分配的经验值

试验次数设多少合适?这是使用贝叶斯优化时问得最多的问题。我的经验值是:参数维度小于等于 5 且有连续参数时,迭代 30 到 50 轮就能看到明显收敛;如果全是离散参数或者维度超过 10,建议至少跑 80 轮,否则采集函数还没有足够的样本建立可靠的代理模型。观察收敛的方法是看每次opt.tell()之后的最优值变化,当前后多轮最优值不再下降时,说明搜索已趋近局部最优。资源分配上,我一般把总预算的 70% 留给贝叶斯迭代,30% 预留给随机初始化点n_initial_points。随机初始化点太少,代理模型初始拟合不稳,早期推荐点容易集中在搜索空间边缘。这个比例在绝大多数机器学习任务上表现都不错。

5. 避坑指南:贝叶斯优化最容易翻车的五个现场

5.1 高维空间采样稀疏,采集函数直接崩坏

现象:参数维度超过 10 后,优化器推荐的参数组合开始变得反直觉,最优值长期不下降,甚至出现采集函数返回异常值。原因:高斯过程在高维空间里需要对样本间的距离矩阵求逆,维度越高,样本越稀疏,协方差矩阵越接近奇异矩阵,数值稳定性急剧恶化。解决:一是换代理模型,把base_estimator从"GP"换成"ET"或"RF",树模型对高维稀疏数据更鲁棒;二是降维,通过特征重要性筛选掉影响较小的超参数,只保留前 5 到 8 个关键参数参与贝叶斯优化;三是增加n_initial_points到 20 以上,让初始样本覆盖更充分。

5.2 随机种子没固定,二次运行结果对不上

现象:同一份代码跑两次,得到的参数组合不同,复现实验时结果不一致。原因:贝叶斯优化器的random_state未设置,同时目标函数内部的数据划分、模型初始化也没有固定随机种子。解决:实例化Optimizer时显式传入random_state=42,同时在目标函数开头调用np.random.seed(0)、torch.manual_seed(0)(深度学习场景),如果用了数据划分还要给train_test_split传random_state。种子值本身不重要,重要的是所有随机源都被固定。

5.3 目标函数异常被优化器吞掉,日志还看不出来

现象:优化循环没有报错,但某几轮返回的最优值突然变成很大的数,或者后续搜索明显偏离正常区域。原因:目标函数内部某次训练抛异常后被上层捕获返回了1e9,但这个惩罚值被模型当作正常观测记录下来,导致代理模型认为附近区域同样差,从而避开一个本该有潜力的区域。解决:目标函数里添加异常日志,区分惩罚返回值与正常返回值;如果在深度学习场景,单独检查 loss 是否为 NaN,并在捕获后打印当时的参数组合,方便后续人工分析。返回惩罚值只作为兜底策略,不能替代异常诊断。

5.4 把离散参数当成连续参数优化

现象:batch_size、n_estimators这类整型参数,搜索时出现batch_size=97、n_estimators=143这种取值,虽然训练代码能跑,但取值不符合业务直觉,而且在整型边界上反复试探。原因:定义了Integer类型的参数,优化器仍然按连续空间建模,只是最后取整。解决:整型参数在建模阶段依然按连续处理,但要注意两点——取值范围不要跨度过大,Integer(8, 512)这种两个数量级的跨度会让模型在低区和高区之间反复横跳,建议拆成Integer(8, 64)加Integer(64, 256)两段独立搜索;另一种思路是直接用Categorical枚举常见取值,比如Categorical([32, 64, 128, 256]),避免模型去猜测中间值。

5.5 早停和贝叶斯优化打架

现象:深度学习调参时,在目标函数内部做了 early stopping,但优化结果比预期差。原因:early stopping 本身包含随机性,相同参数下不同轮次训练出的模型不完全一致,导致目标函数输出有噪声;贝叶斯优化在高噪声环境下会过度信任历史观测,推荐的参数偏向于噪声引起的假阳性。解决:同一组参数重复评估两次,取平均值作为目标函数返回值,以降低噪声;或者减少 early stopping 的轮数敏感性,用验证集上的平滑指标替代单点指标。这个坑在深度学习调参中最隐蔽,因为它不报错,只是结果变差,我早期在这个问题上卡了很久。

6. 装完验证:从接口自检到收敛曲线一次跑通

6.1 用示例脚本做端到端自检

装完环境、看完代码,最后一步是确认这套东西真的能跑通。不要一上来就调自己的真实任务,先用包内examples/自带的测试函数做一次端到端验证。包里有一个examples/demo_bayes.py示例脚本,运行它,如果能在几十秒内输出一组合理解的最优参数,说明环境、依赖、核心模块全部正常。

(bayes_env) $ cd examples (bayes_env) $ python demo_bayes.py

脚本内部使用的是带噪声的二维测试函数,全局最优值已知。验证标准不是看它能跑多快,而是看最终最优值是否逼近测试函数的最小值附近。如果你看到最优值明显偏离,先把random_state固定再重新跑;如果还是不收敛,检查space定义里是否混入了取值跨度极大的维度,这是收敛慢最常见的原因。

6.2 对照收敛曲线判断优化器是否正常工作

我每次装完这套环境,都会额外写一个验证脚本,把优化过程中的最优值变化打印成收敛曲线。这比单纯看最终结果更能说明问题。

from skopt import Optimizer from skopt.space import Real from skopt.utils import use_named_args import numpy as np space = [Real(-5.0, 5.0, name="x"), Real(-5.0, 5.0, name="y")] @use_named_args(space) def objective(**params): x = params["x"] y = params["y"] return (x - 2) ** 2 + (y + 3) ** 2 + 1 opt = Optimizer(dimensions=space, random_state=42) best_so_far = [] for i in range(20): x = opt.ask() y = objective(x) opt.tell(x, y) best_so_far.append(opt.fun) print("Best found:", opt.x, "value:", opt.fun) print("True minimum:", [2.0, -3.0], "value:", 1.0)

这个脚本用了一个解析解已知的函数,全局最优在(2, -3)处,最小值为 1.0。@use_named_args装饰器可以让目标函数直接按参数名字接收字典形式的值,比索引列表可读性高很多。opt.fun是当前最优值,随着迭代次数增加,它应该逐步下降并最终逼近 1.0。如果收敛曲线呈阶梯状快速下降后平稳,说明代理模型和采集函数工作正常;如果曲线一直在高位震荡,优先查space的取值范围是否合理,以及随机种子是否固定。

从那以后,我每次在正式调参任务前都强制走一遍这个解析函数验证流程,确保优化器和运行环境没有黑匣子问题,再放心接入真实训练代码。希望帮到你。

本文还有配套的精品资源,点击获取

相关新闻

C盘无损扩容实战:用DiskGenius挪空间不重装系统

C盘无损扩容实战:用DiskGenius挪空间不重装系统

简介:本资源是一份面向Windows系统用户、特别是SSD主盘空间紧张的普通用户与IT初学者的C盘无损扩容实操指南,解决不重装系统、不格式化分区、不丢失数据的前提下扩大系统盘容量的核心痛点。教程基于免费版DiskGenius(v5.4.6.1441)…

2026/10/20 20:04:05 阅读更多 →
泰山派移植OV8858驱动并添加自动聚焦功能

泰山派移植OV8858驱动并添加自动聚焦功能

/* 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 20:04:05 阅读更多 →
百度网盘免费发放500G空间了,大家记得及时领取

百度网盘免费发放500G空间了,大家记得及时领取

话不多说,直接上图免费网盘空间500G是有30天时效性的,不过每个自然月都是可领取的,大家过期之后记得重新领取即可。比较适合短期应急使用,全程免费,官方长期活动。

2026/10/20 20:03:02 阅读更多 →

最新新闻

YOLO26目标检测训练到RK3588部署:ONNX与RKNN适配实践

YOLO26目标检测训练到RK3588部署:ONNX与RKNN适配实践

YOLO26 目标检测的训练到瑞芯微平台适配,这条链路我最近刚完整跑通一遍。先说结论:真正卡人的地方不在训练本身,而在从 PyTorch 模型走向 RKNN 运行时的那几步——ONNX 导出、算子兼容、INT8 量化,每一个都埋着不少雷。我是在给一…

2026/10/20 20:43:28 阅读更多 →
梯度增强PINN:攻克Allen-Cahn方程多陡峭界面难题

梯度增强PINN:攻克Allen-Cahn方程多陡峭界面难题

Allen-Cahn方程是我调过的最“拧巴”的PDE之一。它表达式极简,一个∂u/∂t ε∂u/∂x u - u,但解的画面完全不简单:能量驱动下的相分离会让解在空间里劈出好几条尖锐的界面,这些界面随时间演化、移动、合并。所谓“多非常陡峭区…

2026/10/20 20:43:28 阅读更多 →
计算机教材内容策划与写作:从概念到工程实践

计算机教材内容策划与写作:从概念到工程实践

抱歉,我无法处理这个请求。

2026/10/20 20:43:28 阅读更多 →
从图像到数据:HaoCurve曲线提取实战与避坑指南

从图像到数据:HaoCurve曲线提取实战与避坑指南

简介:HaoCurve(薅曲线)是一套面向科研人员、工程师与数据分析者的MATLAB曲线绘制工具源码,适合需要在MATLAB环境中快速生成、编辑和分析数据曲线图的用户,尤其对希望深入理解绘图脚本实现、进行二次开发的进阶使用者更…

2026/10/20 20:43:28 阅读更多 →
CLI编码代理失败过程解剖:从轨迹日志到根因分析

CLI编码代理失败过程解剖:从轨迹日志到根因分析

读到一篇很有意思的论文,标题叫《Failure as a Process: An Anatomy of CLI Coding Agent Trajectories》。这两年命令行AI编程工具越来越多,从最初的“能写一段函数”到现在能在真实仓库里自己定位问题、改代码、跑测试,甚至提交补丁。但大多…

2026/10/20 20:43:28 阅读更多 →
小橘子V4.790:本地可调试塔防策略模拟器

小橘子V4.790:本地可调试塔防策略模拟器

简介:本资源是《向僵尸开炮》游戏的自动化对局辅助工具——小橘子V4.790版本完整部署包,面向游戏AI开发者、自动化测试工程师及休闲游戏技术爱好者,用于快速实现人机对战环境下的策略执行、界面识别与操作模拟。压缩包共741个文件&#xff0c…

2026/10/20 20:42:25 阅读更多 →

日新闻

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/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

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

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在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 阅读更多 →