Optuna 如何用 Plotly 可视化函数分析调参结果 📅 发布时间:2026/9/15 18:33:07 👁 浏览次数: Optuna 如何用 Plotly 可视化函数分析调参结果【免费下载链接】optunaA hyperparameter optimization framework项目地址: https://gitcode.com/GitHub_Trending/op/optuna跑完一轮study.optimize()之后调参结果还留在Study对象里哪些 trial 有效、哪些参数相关、最优值何时出现光看日志无法回答。Optuna 的optuna.visualization模块提供一组基于 Plotly 的可视化函数把优化历史、参数关系、参数重要性等内容直接画成交互式图表用于分析调参结果。本文给出从安装依赖到逐图分析再到修改图表的完整路径示例沿用仓库教程 tutorial/10_key_features/005_visualization.py。前提只有一个安装 Plotly。Optuna 本身支持 Python 3.9 及以上见 docs/source/installation.rst。安装依赖并确认 Plotly 可用$ pip install optuna $ pip install plotly如果在 Jupyter Notebook 中运行教程还要求安装nbformat$ pip install nbformat。安装后确认版本满足要求。optuna.visualization依赖 plotly 4.0.0 或更高版本可用模块自带的is_available()判断实现在 optuna/visualization/_utils.pyfrom optuna.visualization import is_available is_available() # True 表示 plotly 已安装且版本可用返回False时按该函数文档提示执行$ pip install -U plotly4.0.0升级。跑一个调参任务得到 Study以教程中的 FashionMNIST 分类任务为例目标函数通过trial.suggest_*采样超参数层数n_layers、每层单元数n_units_l{i}、学习率lr每个 epoch 用trial.report(val_accuracy, epoch)上报中间值配合MedianPruner做剪枝。最后两个 epoch 上报的验证准确率作为返回值import optuna import torch import torch.nn as nn import torch.nn.functional as F import torchvision SEED 13 torch.manual_seed(SEED) DEVICE torch.device(cuda) if torch.cuda.is_available() else torch.device(cpu) DIR .. # 教程相对 tutorial/ 目录的写法指向数据集存放位置可按实际路径替换 BATCHSIZE 128 N_TRAIN_EXAMPLES BATCHSIZE * 30 N_VALID_EXAMPLES BATCHSIZE * 10 def define_model(trial): n_layers trial.suggest_int(n_layers, 1, 2) layers [] in_features 28 * 28 for i in range(n_layers): out_features trial.suggest_int(fn_units_l{i}, 64, 512) layers.append(nn.Linear(in_features, out_features)) layers.append(nn.ReLU()) in_features out_features layers.append(nn.Linear(in_features, 10)) layers.append(nn.LogSoftmax(dim1)) return nn.Sequential(*layers) def train_model(model, optimizer, train_loader): model.train() for batch_idx, (data, target) in enumerate(train_loader): data, target data.view(-1, 28 * 28).to(DEVICE), target.to(DEVICE) optimizer.zero_grad() F.nll_loss(model(data), target).backward() optimizer.step() def eval_model(model, valid_loader): model.eval() correct 0 with torch.no_grad(): for batch_idx, (data, target) in enumerate(valid_loader): data, target data.view(-1, 28 * 28).to(DEVICE), target.to(DEVICE) pred model(data).argmax(dim1, keepdimTrue) correct pred.eq(target.view_as(pred)).sum().item() return correct / N_VALID_EXAMPLES def objective(trial): train_dataset torchvision.datasets.FashionMNIST( DIR, trainTrue, downloadTrue, transformtorchvision.transforms.ToTensor() ) train_loader torch.utils.data.DataLoader( torch.utils.data.Subset(train_dataset, list(range(N_TRAIN_EXAMPLES))), batch_sizeBATCHSIZE, shuffleTrue, ) val_dataset torchvision.datasets.FashionMNIST( DIR, trainFalse, transformtorchvision.transforms.ToTensor() ) val_loader torch.utils.data.DataLoader( torch.utils.data.Subset(val_dataset, list(range(N_VALID_EXAMPLES))), batch_sizeBATCHSIZE, shuffleTrue, ) model define_model(trial).to(DEVICE) optimizer torch.optim.Adam( model.parameters(), trial.suggest_float(lr, 1e-5, 1e-1, logTrue) ) for epoch in range(10): train_model(model, optimizer, train_loader) val_accuracy eval_model(model, val_loader) trial.report(val_accuracy, epoch) if trial.should_prune(): raise optuna.exceptions.TrialPruned() return val_accuracy study optuna.create_study( directionmaximize, sampleroptuna.samplers.TPESampler(seedSEED), pruneroptuna.pruners.MedianPruner(), ) study.optimize(objective, n_trials30, timeout300)数据集通过downloadTrue从网络下载需要可访问网络的环境。优化结束后下面所有图都只依赖这一个study对象。分析优化过程历史与中间值图from optuna.visualization import plot_intermediate_values from optuna.visualization import plot_optimization_history plot_optimization_history(study) plot_intermediate_values(study)plot_optimization_history(study)画所有 trial 的目标值走势并叠加逐 trial 的 Best Value 折线。支持传入target自定义要显示的数值和target_name坐标轴与图例名称还可以传多个 study 对比优化历史见 optuna/visualization/_optimization_history.py。plot_intermediate_values(study)画每个 trial 的中间值曲线学习曲线数据来自目标函数里的trial.report()调用。如果 study 里没有任何中间值函数会提示 You need to set up the pruning feature to utilizeplot_intermediate_values()——即必须在训练中做剪枝/上报才会出图。在 Jupyter Notebook 中执行这两行后交互式图表直接内嵌显示。分析参数关系平行坐标、轮廓、切片与排名from optuna.visualization import plot_contour from optuna.visualization import plot_parallel_coordinate from optuna.visualization import plot_rank from optuna.visualization import plot_slice plot_parallel_coordinate(study) plot_contour(study) plot_slice(study) plot_rank(study)四个函数都接受params参数选择要画的参数缺省为全部参数例如只关注学习率和层数plot_parallel_coordinate(study, params[lr, n_layers]) plot_contour(study, params[lr, n_layers]) plot_slice(study, params[lr, n_layers])plot_parallel_coordinate画高维参数关系每个参数一条纵轴缺少某参数的 trial 会连到特殊的None刻度。plot_contour两两参数的轮廓图含缺失值的 trial 不绘制。注意当direction为minimize或传了target时色标方向会反转。plot_slice每个参数一个子图的切片散点按目标值着色看单个参数的取值分布与好坏 trial 的关系。plot_rank按目标值排名着色的散点图要求 plotly 5.0.0 及以上低于此版本时其余函数仍可用。函数文档中统一的target参数说明单目标 study 缺省画目标值多目标 study 必须显式传target指定画哪一维。分析参数重要性与分布importances 与 EDFfrom optuna.visualization import plot_edf from optuna.visualization import plot_param_importances plot_param_importances(study) plot_edf(study)plot_param_importances(study)画各超参数对目标值的重要度条形图默认使用PedAnovaImportanceEvaluator也接受evaluator与params参数。教程里还展示了用它分析 trial 耗时optuna.visualization.plot_param_importances( study, targetlambda t: t.duration.total_seconds(), target_nameduration )plot_edf(study)画目标值的经验分布函数EDF只统计 complete 状态的 trial。文档说明 EDF 可用于分析和改进搜索空间也可传多个 study 对比。查看 trial 的时间线from optuna.visualization import plot_timeline plot_timeline(study)plot_timeline画各 trial 的执行时间段lifetime用于查看 trial 在时间轴上的排布和时长差异。参数n_recent_trials控制只画最近多少个 trial缺省为全部 trial指定时必须为正整数否则抛ValueError见 optuna/visualization/_timeline.py。修改与保存生成的图表optuna.visualization中每个函数都返回可编辑的plotly.graph_objects.Figure对象可以用 Plotly API 直接改。教程中的例子是替换plot_intermediate_values生成的图标题和坐标轴标签fig plot_intermediate_values(study) fig.update_layout( titleHyperparameter optimization for FashionMNIST classification, xaxis_titleEpoch, yaxis_titleValidation Accuracy, )改完后fig就是普通 Plotly FigureJupyter 中显示它即可看到更新后的标题。边界与替代方案Matplotlib 后端如果偏好 Matplotlib教程说明只需把optuna.visualization换成optuna.visualization.matplotlib函数一一对应该后端需要$ pip install matplotlib。Optuna Dashboardtutorial 提到把 study 持久化到 RDB 后端后可执行$ pip install optuna-dashboard再运行$ optuna-dashboard sqlite:///example-study.db用交互图表和表格查看优化历史、参数重要度等。多目标plot_pareto_front属于多目标优化场景教程要求另行参考多目标教程不在本文范围内。各函数完整 API 参考见 docs/source/reference/visualization/index.rst示例脚本可在 docs/visualization_examples/ 下逐图对照运行。【免费下载链接】optunaA hyperparameter optimization framework项目地址: https://gitcode.com/GitHub_Trending/op/optuna创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考