当前位置: 首页 > news >正文

YOLOv11-ultralytics-8.3.67部分代码阅读笔记-tuner.py

tuner.py

ultralytics\utils\tuner.py

目录

tuner.py

1.所需的库和模块

2.def run_ray_tune(model, space: dict = None, grace_period: int = 10, gpu_per_trial: int = None, max_samples: int = 10, **train_args,): 


1.所需的库和模块

# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/licensefrom ultralytics.cfg import TASK2DATA, TASK2METRIC, get_cfg, get_save_dir
from ultralytics.utils import DEFAULT_CFG, DEFAULT_CFG_DICT, LOGGER, NUM_THREADS, checks

2.def run_ray_tune(model, space: dict = None, grace_period: int = 10, gpu_per_trial: int = None, max_samples: int = 10, **train_args,): 

# 这段代码定义了一个名为 run_ray_tune 的函数,用于使用 Ray Tune 框架进行超参数优化。它支持对模型的训练参数进行自动调优,并提供了与 WandB 集成的日志记录功能。
# 定义了函数 run_ray_tune ,接受以下参数 :
# 1.model :要优化的模型对象。
# 2.space :超参数搜索空间,一个字典,定义了需要优化的参数及其范围。默认为 None 。
# 3.grace_period :ASHA 调度器的宽限期,表示在多少个 epoch 内不会停止试验。默认为 10 。
# 4.gpu_per_trial :每个试验分配的 GPU 数量。默认为 None 。
# 5.max_samples :最大试验次数。默认为 10 。
# 6.**train_args :其他传递给训练函数的参数,以关键字参数的形式传递。
def run_ray_tune(model,space: dict = None,grace_period: int = 10,gpu_per_trial: int = None,max_samples: int = 10,**train_args,
):# 使用 Ray Tune 运行超参数调整。# 示例:# ```python# from ultralytics import YOLO# # Load a YOLO11n model# model = YOLO("yolo11n.pt")# # 开始调整YOLO11n 在 COCO8 数据集上训练的超参数# result_grid = model.tune(data="coco8.yaml", use_ray=True)"""Runs hyperparameter tuning using Ray Tune.Args:model (YOLO): Model to run the tuner on.space (dict, optional): The hyperparameter search space. Defaults to None.grace_period (int, optional): The grace period in epochs of the ASHA scheduler. Defaults to 10.gpu_per_trial (int, optional): The number of GPUs to allocate per trial. Defaults to None.max_samples (int, optional): The maximum number of trials to run. Defaults to 10.train_args (dict, optional): Additional arguments to pass to the `train()` method. Defaults to {}.Returns:(dict): A dictionary containing the results of the hyperparameter search.Example:```pythonfrom ultralytics import YOLO# Load a YOLO11n modelmodel = YOLO("yolo11n.pt")# Start tuning hyperparameters for YOLO11n training on the COCO8 datasetresult_grid = model.tune(data="coco8.yaml", use_ray=True)```"""# 在日志中输出一条提示信息,引导用户了解 Ray Tune 的相关文档。LOGGER.info("💡 Learn about RayTune at https://docs.ultralytics.com/integrations/ray-tune")    # 💡 了解 RayTune,请访问 https://docs.ultralytics.com/integrations/ray-tune 。# 检查 train_args 是否为空。if train_args is None:# 如果为空,则初始化为空字典。train_args = {}# 这段代码的作用是检查和导入运行 Ray Tune 所需的依赖项,并验证 wandb 是否可用。# 开始一个 try 块,用于捕获导入过程中可能出现的异常。try:# 调用 checks.check_requirements 函数,检查是否安装了 ray[tune] 。如果未安装,该函数会抛出异常。# def check_requirements(requirements=ROOT.parent / "requirements.txt", exclude=(), install=True, cmds=""):# -> 用于检查和安装Python项目的依赖项。返回 False ,表示自动安装失败。如果未启用自动安装功能( install 为 False 或 AUTOINSTALL 为 False ),直接返回 False ,表示未安装缺失的依赖项。如果 pkgs 列表为空(即没有缺失的依赖项),返回 True ,表示所有依赖项都已满足。# -> return False / return False / return Truechecks.check_requirements("ray[tune]")# 导入 ray 模块,这是 Ray Tune 的核心依赖项。import ray# 从 ray 模块中导入 tune 子模块,用于 超参数优化 。from ray import tune# 从 ray.air 模块中导入 RunConfig ,用于 配置 Ray Tune 的运行参数 。from ray.air import RunConfig# 从 ray.air.integrations.wandb 模块中导入 WandbLoggerCallback ,用于 将训练日志同步到 Weights & Biases (WandB) 。from ray.air.integrations.wandb import WandbLoggerCallback# 从 ray.tune.schedulers 模块中导入 ASHAScheduler ,用于 实现超参数优化的调度策略 。from ray.tune.schedulers import ASHAScheduler# 捕获导入过程中可能出现的 ImportError 异常。except ImportError:# 如果捕获到 ImportError ,抛出一个 ModuleNotFoundError ,提示用户安装 ray[tune] 。raise ModuleNotFoundError('Ray Tune required but not found. To install run: pip install "ray[tune]"')    # 需要 Ray Tune,但未找到。要安装,请运行:pip install "ray[tune]"。# 开始第二个 try 块,用于检查 wandb 是否可用。try:# 尝试导入 wandb 模块。import wandb# 验证导入的 wandb 模块是否包含 __version__ 属性,以确保其正确导入。如果 wandb 未正确安装或导入失败,会抛出 AssertionError 。assert hasattr(wandb, "__version__")# 捕获 ImportError 或 AssertionError 异常。except (ImportError, AssertionError):# 如果捕获到异常,将 wandb 设置为 False ,表示 wandb 不可用。wandb = False# 这段代码的作用是。检查和导入 Ray Tune 所需的依赖项:如果未安装 ray[tune] ,抛出异常并提示用户安装。导入 Ray Tune 的核心模块和工具。验证 wandb 是否可用:如果 wandb 未安装或导入失败,将 wandb 设置为 False ,避免后续代码中使用 wandb 功能。这种设计确保了代码在运行前具备必要的依赖项,并且能够灵活处理依赖项缺失的情况,避免因未安装的模块导致程序崩溃。# 这段代码的作用是检查 Ray 的版本是否满足要求,并定义了一个默认的超参数搜索空间 default_space ,最后将模型对象存储到 Ray 的对象存储中。# 调用 checks.check_version 函数,检查 Ray 的版本是否满足 >=2.0.0 。 如果版本不符合要求,会抛出异常并提示用户升级 Ray。checks.check_version(ray.__version__, ">=2.0.0", "ray")# 定义了一个默认的超参数搜索空间 default_space ,包含多个超参数及其范围。default_space = {# 'optimizer': tune.choice(['SGD', 'Adam', 'AdamW', 'NAdam', 'RAdam', 'RMSProp']),# lr0 :初始学习率,范围为 [1e-5, 1e-1] 。"lr0": tune.uniform(1e-5, 1e-1),# lrf :最终学习率因子( lr0 * lrf ),范围为 [0.01, 1.0] 。"lrf": tune.uniform(0.01, 1.0),  # final OneCycleLR learning rate (lr0 * lrf)# momentum :动量(SGD)或 Adam 的 beta1,范围为 [0.6, 0.98] 。"momentum": tune.uniform(0.6, 0.98),  # SGD momentum/Adam beta1# weight_decay :优化器的权重衰减,范围为 [0.0, 0.001] 。"weight_decay": tune.uniform(0.0, 0.001),  # optimizer weight decay 5e-4# warmup_epochs :预热阶段的轮数(可以是分数),范围为 [0.0, 5.0] 。"warmup_epochs": tune.uniform(0.0, 5.0),  # warmup epochs (fractions ok)# warmup_momentum :预热阶段的初始动量,范围为 [0.0, 0.95] 。"warmup_momentum": tune.uniform(0.0, 0.95),  # warmup initial momentum# box :边界框损失权重,范围为 [0.02, 0.2] 。"box": tune.uniform(0.02, 0.2),  # box loss gain# cls :分类损失权重,范围为 [0.2, 4.0] 。"cls": tune.uniform(0.2, 4.0),  # cls loss gain (scale with pixels)# hsv_h :HSV 色调增强(分数),范围为 [0.0, 0.1] 。"hsv_h": tune.uniform(0.0, 0.1),  # image HSV-Hue augmentation (fraction)# hsv_s :HSV 饱和度增强(分数),范围为 [0.0, 0.9] 。"hsv_s": tune.uniform(0.0, 0.9),  # image HSV-Saturation augmentation (fraction)# hsv_v :HSV 明度增强(分数),范围为 [0.0, 0.9] 。"hsv_v": tune.uniform(0.0, 0.9),  # image HSV-Value augmentation (fraction)# degrees :图像旋转角度(正负),范围为 [0.0, 45.0] 。"degrees": tune.uniform(0.0, 45.0),  # image rotation (+/- deg)# translate :图像平移比例(正负),范围为 [0.0, 0.9] 。"translate": tune.uniform(0.0, 0.9),  # image translation (+/- fraction)# scale :图像缩放比例(正负),范围为 [0.0, 0.9] 。"scale": tune.uniform(0.0, 0.9),  # image scale (+/- gain)# shear :图像剪切角度(正负),范围为 [0.0, 10.0] 。"shear": tune.uniform(0.0, 10.0),  # image shear (+/- deg)# perspective :图像透视增强(分数),范围为 [0.0, 0.001] 。"perspective": tune.uniform(0.0, 0.001),  # image perspective (+/- fraction), range 0-0.001# flipud :图像上下翻转概率,范围为 [0.0, 1.0] 。"flipud": tune.uniform(0.0, 1.0),  # image flip up-down (probability)# fliplr :图像左右翻转概率,范围为 [0.0, 1.0] 。"fliplr": tune.uniform(0.0, 1.0),  # image flip left-right (probability)# bgr :图像通道顺序为 BGR 的概率,范围为 [0.0, 1.0] 。"bgr": tune.uniform(0.0, 1.0),  # image channel BGR (probability)# mosaic :马赛克数据增强概率,范围为 [0.0, 1.0] 。"mosaic": tune.uniform(0.0, 1.0),  # image mixup (probability)# mixup :混合数据增强概率,范围为 [0.0, 1.0] 。"mixup": tune.uniform(0.0, 1.0),  # image mixup (probability)# copy_paste :复制粘贴增强概率,范围为 [0.0, 1.0] 。"copy_paste": tune.uniform(0.0, 1.0),  # segment copy-paste (probability)}# Put the model in ray store# 从模型对象中获取任务类型(例如 task 可能是 detect 、 segment 等)。task = model.task# 使用 ray.put 将模型对象存储到 Ray 的对象存储中。 这样可以确保模型对象在多个试验中共享,避免重复加载。model_in_store = ray.put(model)# 这段代码的作用是。版本检查:确保 Ray 的版本满足 >=2.0.0 。定义超参数搜索空间:提供了一个默认的超参数搜索空间 default_space ,包含多个与训练相关的超参数及其范围。模型共享:将模型对象存储到 Ray 的对象存储中,以便在多个试验中共享,提高效率。这种设计使得超参数优化过程更加自动化和高效,同时提供了灵活的超参数配置选项。# 这段代码定义了一个名为 _tune 的内部函数,用于执行单次超参数优化试验的训练过程。它是 Ray Tune 框架中用于训练模型的核心函数。# 定义了一个名为 _tune 的函数,接受一个参数。# 1.config :一个字典,包含当前试验的超参数配置。def _tune(config):# 使用指定的超参数和其他参数训练 YOLO 模型。"""Trains the YOLO model with the specified hyperparameters and additional arguments.Args:config (dict): A dictionary of hyperparameters to use for training.Returns:None"""# 使用 ray.get 从 Ray 的对象存储中获取模型对象 model_in_store 。 model_in_store 是在外部通过 ray.put 存储的模型对象,用于在多个试验中共享同一个模型实例。model_to_train = ray.get(model_in_store)  # get the model from ray store for tuning# 调用模型的 reset_callbacks 方法,重置模型的回调函数。 这一步是为了确保每次试验时,模型的回调函数(如日志记录、早停等)都是干净的,避免回调函数在多次试验中重复使用。model_to_train.reset_callbacks()# 将外部传入的 train_args 更新到当前试验的配置字典 config 中。 train_args 是一个字典,包含用户指定的训练参数(如数据路径、训练轮数等)。这一步确保了用户指定的参数能够覆盖默认的超参数配置。config.update(train_args)# 使用更新后的配置字典 config 调用模型的 train 方法进行训练。 **config 将字典中的键值对作为关键字参数传递给 train 方法。 results 是训练过程的返回值,通常包含训练结果和评估指标。results = model_to_train.train(**config)# 返回训练结果的字典 results.results_dict 。 这个字典通常包含训练过程中的关键指标(如损失值、准确率等),用于 Ray Tune 框架评估当前试验的性能。return results.results_dict# 这段代码定义了一个名为 _tune 的函数,用于执行单次超参数优化试验的训练过程。它的主要功能包括。模型共享:从 Ray 的对象存储中获取模型对象,确保多个试验共享同一个模型实例。回调重置:重置模型的回调函数,避免回调函数在多次试验中重复使用。配置更新:将用户指定的训练参数更新到当前试验的配置中,确保用户设置的参数能够生效。模型训练:使用更新后的配置调用模型的 train 方法进行训练,并返回训练结果。结果返回:返回训练结果的字典,供 Ray Tune 框架评估当前试验的性能。这种设计使得超参数优化过程更加高效和灵活,同时确保了每次试验的独立性和用户配置的优先级。# 这段代码的作用是获取超参数搜索空间和数据集路径,并确保它们被正确设置。# Get search space    注释说明接下来的代码块用于获取超参数搜索空间。# 检查是否提供了用户自定义的超参数搜索空间 space 。如果 space 为 None 或为空字典,则使用默认的搜索空间。if not space:# 如果用户没有提供超参数搜索空间,则将 space 设置为默认的搜索空间 default_space 。space = default_space# 如果使用了默认的搜索空间,通过日志记录器 LOGGER 输出警告信息,提示用户未提供搜索空间,正在使用默认值。LOGGER.warning("WARNING ⚠️ search space not provided, using default search space.")    # 警告⚠️未提供搜索空间,使用默认搜索空间。# Get dataset    注释说明接下来的代码块用于获取数据集路径。# 从 train_args 中获取数据集路径 data 。 如果 train_args 中提供了 data 键,则使用其值。 如果未提供,则从 TASK2DATA 字典中根据任务类型 task 获取默认数据集路径。data = train_args.get("data", TASK2DATA[task])# 将数据集路径 data 添加到 超参数搜索空间 space 中。这一步确保在超参数优化过程中,每个试验都使用相同的训练数据集。space["data"] = data# 检查 train_args 中是否提供了 data 键。如果未提供,则输出警告信息。if "data" not in train_args:# 如果未提供数据集路径,通过日志记录器 LOGGER 输出警告信息,提示用户未提供数据集路径,正在使用默认值。LOGGER.warning(f'WARNING ⚠️ data not provided, using default "data={data}".')    # 警告⚠️未提供数据,使用默认的“data={data}”。# 这段代码的作用是。获取超参数搜索空间:如果用户未提供超参数搜索空间,则使用默认的搜索空间。如果使用了默认搜索空间,输出警告信息提示用户。获取数据集路径:从 train_args 中获取数据集路径,如果未提供,则使用默认值。将数据集路径添加到超参数搜索空间中,确保每个试验使用相同的训练数据集。如果未提供数据集路径,输出警告信息提示用户。这种设计确保了超参数优化过程中的灵活性和健壮性:用户可以自定义超参数搜索空间,也可以使用默认值。数据集路径可以通过用户指定或使用默认值,避免因未提供数据集路径而导致错误。# 这段代码的作用是定义了 Ray Tune 的训练函数、调度器和回调,用于执行超参数优化。# Define the trainable function with allocated resources    注释说明接下来的代码块用于定义训练函数,并为其分配资源。# 使用 tune.with_resources 函数将 _tune 函数与资源分配绑定。# 每个试验将分配以下资源 :# CPU : NUM_THREADS 个线程。# GPU : gpu_per_trial 个 GPU,如果未指定,则默认为 0 。# 这一步确保了每个试验在运行时能够获得足够的计算资源。trainable_with_resources = tune.with_resources(_tune, {"cpu": NUM_THREADS, "gpu": gpu_per_trial or 0})# Define the ASHA scheduler for hyperparameter search    注释说明接下来的代码块用于定义 ASHA 调度器。# ASHAScheduler(time_attr='training_iteration', metric='metric', mode='max', max_t=100, grace_period=1, reduction_factor=4, brackets=1)# ASHAScheduler 是 Ray Tune 中的一个调度器,它实现了异步连续减半(Async Successive Halving)算法。这种算法可以提前终止性能较差的试验,节省计算资源,并将资源分配给表现较好的试验。# 参数说明 :# time_attr :(默认为 'training_iteration')用于比较时间的属性,可以是任何单调递增的属性,例如训练轮次。# metric :要优化的指标名称,即在训练结果字典中用于衡量优化目标的值。# mode :(默认为 'max')优化模式,可以是 'min' 或 'max',表示是最小化还是最大化指标。# max_t :(默认为 100)试验可以运行的最大时间单位,单位由 time_attr 决定。# grace_period :(默认为 1)在至少这个时间之后才考虑停止试验,单位与 time_attr 相同。# reduction_factor :(默认为 4)用于设置减半率和数量的无量纲标量。# brackets :(默认为 1)分组的数量,每个分组有不同的减半率,由 reduction_factor 指定。# ASHAScheduler 与其他调度器相比,提供了更好的并行性,并且在淘汰过程中避免了落后问题。因此,Ray Tune 推荐使用 ASHAScheduler 而不是标准的 HyperBandScheduler 。# 创建了一个 ASHA 调度器实例,用于超参数优化的调度策略。asha_scheduler = ASHAScheduler(# 使用训练的 epoch 数作为时间属性。time_attr="epoch",# 指定优化的目标指标(如准确率、mAP 等),根据任务类型从 TASK2METRIC 字典中获取。metric=TASK2METRIC[task],# 优化目标是最大化指定的指标。mode="max",# 最大训练轮数,优先使用 train_args 中的 epochs ,如果没有则使用默认配置或默认值 100 。max_t=train_args.get("epochs") or DEFAULT_CFG_DICT["epochs"] or 100,# 宽限期,表示在多少个 epoch 内不会停止表现不佳的试验。grace_period=grace_period,# 每次减少试验数量的因子。reduction_factor=3,)# Define the callbacks for the hyperparameter search    注释说明接下来的代码块用于定义超参数优化的回调。# 定义了一个回调列表 tuner_callbacks ,用于记录训练过程的日志。# 如果 wandb 可用,则添加 WandbLoggerCallback ,将日志同步到 WandB 项目 YOLOv8-tune 。# 如果 wandb 不可用,则回调列表为空。tuner_callbacks = [WandbLoggerCallback(project="YOLOv8-tune")] if wandb else []# 这段代码的作用是。定义训练函数与资源分配:将 _tune 函数与资源分配绑定,确保每个试验能够获得足够的 CPU 和 GPU 资源。定义 ASHA 调度器:使用 ASHA 调度器动态调整试验,优化目标是最大化指定的指标。调度器的参数包括最大训练轮数、宽限期和减少因子,这些参数确保了优化过程的高效性和灵活性。定义回调:如果 wandb 可用,添加 WandbLoggerCallback ,将训练日志同步到 WandB。如果 wandb 不可用,则不使用任何回调。这种设计使得超参数优化过程更加高效和灵活,同时提供了详细的日志记录功能,便于用户监控和分析训练过程。# 这段代码的作用是创建一个 Ray Tune 超参数优化调优器( tuner ),并配置相关的保存目录、参数空间和运行配置。# Create the Ray Tune hyperparameter search tuner    注释说明接下来的代码块用于创建 Ray Tune 的超参数优化调优器。# 调用 get_save_dir 函数生成保存目录路径。# 使用 get_cfg(DEFAULT_CFG, train_args) 获取配置对象。# 如果 train_args 中提供了 name ,则使用其值作为保存目录的名称;否则,默认为 "tune" 。# 调用 .resolve() 确保生成的路径是绝对路径。# tune_dir 是 保存超参数优化结果的目录 。tune_dir = get_save_dir(get_cfg(DEFAULT_CFG, train_args), name=train_args.pop("name", "tune")).resolve()  # must be absolute dir# 使用 mkdir 方法创建保存目录。 parents=True 如果父目录不存在,则一并创建。 exist_ok=True 如果目录已存在,则不会抛出异常。tune_dir.mkdir(parents=True, exist_ok=True)# 创建一个 Ray Tune 调优器实例 tuner ,用于执行超参数优化。tuner = tune.Tuner(# 绑定资源的训练函数(之前定义的 _tune 函数)。trainable_with_resources,# 超参数搜索空间,定义了需要优化的参数及其范围。param_space=space,# 配置超参数优化的调度器和试验数量。# scheduler=asha_scheduler :使用 ASHA 调度器动态调整试验。# num_samples=max_samples :最大试验次数。tune_config=tune.TuneConfig(scheduler=asha_scheduler, num_samples=max_samples),# 配置运行参数。# callbacks=tuner_callbacks :回调列表,用于日志记录(如 WandB)。# storage_path=tune_dir :保存超参数优化结果的目录路径。run_config=RunConfig(callbacks=tuner_callbacks, storage_path=tune_dir),)# 这段代码的作用是。生成保存目录:使用 get_save_dir 函数生成保存超参数优化结果的目录。确保目录路径是绝对路径,并创建目录(如果不存在)。创建 Ray Tune 调优器:配置训练函数,并为其分配资源(CPU 和 GPU)。定义超参数搜索空间 space ,指定需要优化的参数及其范围。使用 ASHA 调度器动态调整试验,优化目标是最大化指定的指标。配置运行参数,包括回调(如 WandB)和保存路径。这种设计使得超参数优化过程更加高效和灵活,同时提供了详细的日志记录功能,便于用户监控和分析训练过程。# 这段代码的作用是执行超参数优化过程,获取优化结果,并清理 Ray 的资源。# Run the hyperparameter search    注释说明接下来的代码块用于执行超参数优化过程。# 调用 tuner.fit() 方法启动超参数优化过程。# 这一步会根据之前定义的配置(如调度器、搜索空间、资源分配等)运行多个试验,并自动调整超参数以寻找最优解。# 在优化过程中,Ray Tune 会根据调度器的策略(如 ASHA)动态停止表现不佳的试验,以节省资源。tuner.fit()# Get the results of the hyperparameter search    注释说明接下来的代码块用于获取超参数优化的结果。# 调用 tuner.get_results() 方法获取超参数优化的结果。# results 是一个对象,包含了所有试验的结果,包括每个试验的超参数配置、训练指标、最佳试验等信息。# 这些结果可以用于分析和评估超参数优化的效果,例如查看最佳试验的超参数配置和性能指标。results = tuner.get_results()# Shut down Ray to clean up workers    注释说明接下来的代码块用于关闭 Ray,清理资源。# 调用 ray.shutdown() 方法关闭 Ray。# 这一步会清理所有与 Ray 相关的资源,包括关闭后台进程和释放 GPU 资源。# 这是一个重要的步骤,尤其是在脚本运行结束后,以避免资源泄漏。ray.shutdown()# 返回 超参数优化的结果 results 。 这个结果对象可以被进一步分析,例如提取最佳试验的超参数配置,或者用于后续的模型训练和评估。return results# 这段代码的作用是。执行超参数优化:使用 tuner.fit() 启动超参数优化过程,根据定义的调度器和搜索空间运行多个试验。优化过程会动态调整超参数,寻找最优解。获取优化结果:使用 tuner.get_results() 获取超参数优化的结果,包括所有试验的超参数配置和性能指标。清理资源:使用 ray.shutdown() 关闭 Ray,清理所有与 Ray 相关的资源,确保资源不会泄漏。这种设计使得超参数优化过程更加高效和灵活,同时提供了完整的生命周期管理,从启动优化到清理资源,确保了整个过程的健壮性。
# 这段代码定义了一个函数 run_ray_tune ,用于使用 Ray Tune 框架进行超参数优化。它支持以下功能。超参数搜索空间:用户可以自定义超参数搜索空间,或者使用默认的搜索空间。资源分配:支持为每个试验分配 CPU 和 GPU 资源。调度策略:使用 ASHA 调度器动态调整试验,提高优化效率。日志记录:支持与 WandB 集成,记录训练过程和结果。保存目录管理:动态生成保存目录,避免路径冲突。灵活性:支持用户通过 train_args 传递额外的训练参数。这种设计使得超参数优化过程更加自动化、高效,并且易于扩展和集成。
# def run_ray_tune(model, space: dict = None, grace_period: int = 10, gpu_per_trial: int = None, max_samples: int = 10, **train_args,):
# -> 用于使用 Ray Tune 框架进行超参数优化。它支持对模型的训练参数进行自动调优,并提供了与 WandB 集成的日志记录功能。返回 超参数优化的结果 results 。 这个结果对象可以被进一步分析,例如提取最佳试验的超参数配置,或者用于后续的模型训练和评估。
# -> return results

相关文章:

YOLOv11-ultralytics-8.3.67部分代码阅读笔记-tuner.py

tuner.py ultralytics\utils\tuner.py 目录 tuner.py 1.所需的库和模块 2.def run_ray_tune(model, space: dict None, grace_period: int 10, gpu_per_trial: int None, max_samples: int 10, **train_args,): 1.所需的库和模块 # Ultralytics 🚀 AGPL-…...

一文说清楚什么是Token以及项目中使用Token延伸的问题

首先可以参考我的往期文章,我这里说清楚了Cookie,Seesion,Token以及JWT是什么 其实Token你就可以理解成这是一个认证令牌就好了 详细分清Session,Cookie和Token之间的区别,以及JWT是什么东西_还分不清 cookie、sessi…...

VueRouter 实例

分析下列代码 const router new VueRouter({mode:history,routes }) 1.const router new VueRouter({ ... })用来创建一个 Vue Router 实例,用于管理 Vue.js 应用的路由。2.mode: history: 作用:启用 HTML5 History 模式,去除…...

【算法工程】解决linux下Aspose.slides提示No usable version of libssl found以及强化推理模型的短板

1. 背景 构建ubuntu镜像,然后使用Aspose.slides解析PPTX文档,发现一直提示“No usable version of libssl found”。 2. 尝试 使用deepseek R1、kimi1.5、chatgpt o3,并且都带上联网能力,居然还是没有一个能够真正解决&#xf…...

解析浏览器中JavaScript与Native交互原理:以WebGPU为例

引言 随着Web应用复杂度的提升,开发者对浏览器访问本地硬件能力的需求日益增长。然而,浏览器必须在开放性与安全性之间找到平衡——既不能放任JavaScript(JS)随意操作系统资源,又要为高性能计算、图形渲染等场景提供支…...

小火车理论

格助词...

深度学习框架探秘|Keras 应用案例解析以及 Keras vs TensorFlow vs PyTorch

引言 上一篇文章《深度学习框架探秘|Keras:深度学习的魔法钥匙》 我们初步学习了 Keras,包括它是什么、具备哪些优势(简洁易用的 API、强大的兼容性、广泛的应用领域),以及基本使用方法。本文,…...

【01 背包】

01 背包解题思路: 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 这是标准的背包问题,每一件物品其实只有两个状…...

算法10-二分查找算法

一、二分查找算法概念 二分查找(Binary Search)是一种高效的查找算法,适用于在有序数组中快速查找目标值。它的核心思想是通过不断缩小查找范围,将时间复杂度从线性查找的 O(n) 优化到 O(log n)。 二、二分查找的流程图 以下是二…...

变相提高大模型上下文长度-RAG文档压缩-3.优化map-reduce(reranker过滤+社区聚类)

我遇到的业务问题实际上是RAG需要处理很多同一对象的日常报告,不像常识类问题,它的相关Document更多而且更分散,日常报告代表数据库里有很多它的内容,而且对象可能只在段落中的几句话提及到。top-k数量受限于大模型长度&#xff0…...

算法11-分治算法

一、分治算法概念 分治算法(Divide and Conquer)是一种重要的算法设计思想,通过将问题分解为多个子问题,分别解决后再合并结果,从而解决原问题。分治算法的核心思想是“分而治之”,通常包含三个步骤&#…...

Golang internals

To be continued... time.Time golang的时区和神奇的time.Parse context.Context Go Context的踩坑经历 sync.Pool sync.Pool workflow in Go 1.12 new shared pools in Go 1.13 什么是cpu cache理解 Go 1.13 中 sync.Pool 的设计与实现Go: Understand the Design of Sync.Pool…...

Flask中获取请求参数的一些方式总结

在 Flask 中,可以从 request 对象中获取各种类型的参数。以下是全面整理的获取参数的方式及示例代码。 1. 获取 URL 查询参数(Query String Parameters) URL 中的查询参数通过 ?keyvalue&key2value2 的形式传递,使用 reques…...

vscode/cursor 写注释时候出现框框解决办法

一、问题描述 用vscode/cursor写注释出现如图的框框,看着十分难受,用pycharm就没有 二、解决办法 以下两种,哪个好用改那个 (1)Unicode Highlight:Ambiguous Characters Unicode Highlight:Ambiguous Characters &a…...

11-跳跃游戏

给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。 贪心算法思路分析 在遍…...

TestHubo基础教程-创建项目

TestHubo是一款国产开源一站式测试工具,涵盖功能测试、接口测试、性能测试,以及 Web 和 App 测试,可以满足不同类型项目的测试需求。本文将介绍如何快速创建第一个项目,以快速入门上手。 1、创建项目 在 TestHubo 中,…...

GHOST重装后DEF盘丢失的全面解析与数据恢复实战指南

GHOST作为一款经典的系统备份与还原工具,因其高效便捷的特性被广泛应用于系统重装和数据恢复场景。然而,许多用户在使用GHOST重装系统后,发现DEF盘(即D盘、E盘、F盘等非系统盘)突然丢失,导致重要数据无法访…...

soular基础教程-使用指南

soular是TikLab DevOps工具链的统一帐号中心,今天来介绍如何使用 soular 配置你的组织、工作台,快速入门上手。  1. 账号管理 可以对账号信息进行多方面管理,包括分配不同的部门、用户组等,从而确保账号权限和职责…...

刷题记录(回顾)HOT100 二叉树-10: ​199. 二叉树的右视图

题目:199. 二叉树的右视图 难度:中等 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左 子树 只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左…...

【Java学习】类和对象

目录 一、选择取块解 二、类变量 三、似复刻变量 四、类变量的指向对象 五、变量的解引用访问 1.new 类变量(参) 2.this(参) 3.类变量/似复刻变量. 六、代码块 七、复制变量的赋值顺序 八、访问限定符 1.private 2.default 九、导类 一、选择取块解 解引用都有可以…...

安卓基础(Adapter)

想象一下,你有一堆玩具(数据),这些玩具很特别,每个玩具都是不同的,可能有汽车、飞机、积木等。现在,你想把这些玩具摆放到一个展示柜(显示的界面)里,给大家看…...

mybatis-lombok工具包介绍

Lombok是一个实用的]ava类库,能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,并可以自动化生成日志变量,简化java开发、提高效率。 使用前要加入Lombok依赖...

React - 高阶函数-函数柯里化

在 JavaScript 和 React 中,高阶函数是指能够接收其它函数作为参数,或者返回一个函数的函数。柯里化是一种将函数的多个参数转化为一系列嵌套函数的技术,通常用于简化函数的使用和提高其可组合性。 使用前: import React,{Compo…...

数据守护者:备份文件的重要性及自动化备份实践

在信息化社会,数据已成为企业运营和个人生活的重要组成部分。无论是企业的核心业务数据,还是个人的珍贵照片、重要文档,数据的丢失或损坏都可能带来无法估量的损失。因此,备份文件的重要性愈发凸显,它不仅是数据安全的…...

【kafka系列】消费者重平衡

目录 流程 1. 消费者组重平衡(Rebalance)的流程逻辑分析 阶段一:触发重平衡 阶段二:消费者组协调 阶段三:重平衡完成 关键设计思想 2. Mermaid 流程代码 关键点总结 重平衡的影响 1. 重平衡期间的消费行为 2…...

光谱相机在天文学领域的应用

天体成分分析 恒星成分研究:恒星的光谱包含了其大气中各种元素的吸收和发射线特征。通过光谱相机精确测量这些谱线,天文学家能确定恒星大气中氢、氦、碳、氮、氧等元素的含量。如对太阳的光谱分析发现,太阳大气中氢元素占比约 71%&#xff0…...

Java 基于 SpringBoot+Vue 的家政服务管理平台设计与实现

博主介绍:✌程序员徐师兄、8年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战*✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅&#x1f447…...

ABC393E/F简要题解

ABC393E 给定数组 A A A,求包含元素 A i A_i Ai​的大小为 k k k的子集中最大的最大公约数。 题解: 首先思考对于整个数组所有包含 k k k个元素的子集中最大的GCD是多少,可以怎么求。 我们发现,如果一个数 x x x,数组中如果存在至少 k k …...

什么是Mustache

Mustache 是一种轻量级模板引擎,用于将变量插入到模板中生成最终的文本输出。它的设计简单且易于使用,适用于多种编程语言,包括 JavaScript、Python、Ruby、Java 等。 Mustache 的模板语法使用双大括号 {{}} 包裹变量或表达式,用…...

GGUF格式的DeepSeek-R1-Distill-Qwen-1.5B模型的字段解析

在将GGUF文件转换为PyTorch格式之前,先要读取文件并了解模型中都有什么字段,会遇到了各种参数不匹配的问题。现在,我们先读取GGUF文件的元数据字段,并希望将这些字段中的内存映射(mmap)数据转换为字符串显示…...

Java和SQL测试、性能监控中常用工具

下面我会详细列举一些在Java和SQL测试、调试、性能监控中常用的工具,并结合项目中提到的各个技术点说明如何选择合适的工具和方法。 一、Java项目常用的测试、调试与性能监控工具 单元测试与集成测试: JUnit/TestNG: 用于编写单元测试和集成测…...

CAS单点登录(第7版)13.票务

如有疑问,请看视频:CAS单点登录(第7版) 票务 概述 票务 有两个核心的可配置工单组件: TicketRegistry - 提供持久票证存储。ExpirationPolicy - 提供票证过期语义的策略框架。 工单注册 部署环境和技术专业知识…...

大语言模型入门

大语言模型入门 1 大语言模型步骤1.1 pre-training 预训练1.1.1 从网上爬数据1.1.2 tokenization1.1.2.1 tokenization using byte pair encoding 1.3 预训练1.3.1 context1.3.2 training1.3.3 输出 1.2 post-training1.2.1 token 1.2 SFT监督微调1.3 人类反馈强化学习1.3.1 人…...

从ARM官方获取自己想要的gcc交叉编译工具链接(Arm GNU Toolchain),并在Ubuntu系统中进行配置

前言 本文是博文 https://blog.csdn.net/wenhao_ir/article/details/145547974 的分支博文。 在本博文中我们完成gcc交叉编译工具gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz的下载、配置、测试。 下载自己想要的gcc交叉编译工具的源码 目标文件的名字及说…...

LDR6500:重塑充电与数据传输的新篇章

在当今快速发展的数字时代,电子设备对充电速度、数据传输效率和兼容性提出了更高要求。LDR6500,作为一款专为USB Type-C Bridge设备设计的USB-C DRP(Dual Role Port,双角色端口)接口USB PD(Power Delivery&…...

Matlab 机器人 雅可比矩阵

工业机器人运动学与Matlab正逆解算法学习笔记(用心总结一文全会)(四)——雅可比矩阵_staubli机器人正逆向运动学实例验证matlab-CSDN博客 matlab求雅可比矩阵_六轴机械臂 矢量积法求解雅可比矩阵-CSDN博客 (63 封私信 / 80 条消息…...

网络安全防护:开源WAF雷池SafeLine本地部署与配置全流程

文章目录 前言1.关于SafeLine2.安装Docker3.本地部署SafeLine4.使用SafeLine5.cpolar内网穿透工具安装6.创建远程连接公网地址7.固定Uptime Kuma公网地址 前言 对于建站新手来说,无论你选择创建的是个人博客、企业官网还是各类应用平台来推广自己的内容或是产品&am…...

vue框架生命周期详细解析

Vue.js 的生命周期钩子函数是理解 Vue 组件行为的关键。每个 Vue 实例在创建、更新和销毁过程中都会经历一系列的生命周期阶段,每个阶段都有对应的钩子函数,开发者可以在这些钩子函数中执行特定的操作。 Vue 生命周期概述 Vue 的生命周期可以分为以下几…...

Ollama 安装使用指南

rootdeepseek-1:/home/zgq/.ollama# lsof -i :11434 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ollama 29005 root 3u IPv4 47359 0t0 TCP localhost:11434 (LISTEN) 从以上提供的 lsof 输出来看,Ollama 服务正在监听 localhost:11434…...

力扣 38. 外观数列 打表 迭代 阅读理解

Problem: 38. 外观数列 &#x1f9d1;‍&#x1f3eb; 参考题目补充说明 &#x1f9d1;‍&#x1f3eb; 参考题解 迭代法 class Solution {public String countAndSay(int n) {String str "1";for (int i 2; i < n; i) {StringBuilder sb new StringBuild…...

文心一言4月起全面免费,6月底开源新模型:AI竞争进入新阶段?

名人说&#xff1a;莫听穿林打叶声&#xff0c;何妨吟啸且徐行。—— 苏轼 Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、文心一言免费化的背后&#xff1a;AI成本与应用的双重驱动1️⃣成本下降&#xff0c;推动文心一言普及2…...

基于LSTM+前向均值滤波后处理的癫痫发作检测(包含数据集)

引言 癫痫是一种常见的神经系统疾病&#xff0c;患者会经历反复的癫痫发作。早期检测和预警对于改善患者的生活质量至关重要。近年来&#xff0c;深度学习技术&#xff0c;尤其是长短期记忆网络&#xff08;LSTM&#xff09;&#xff0c;在时间序列数据分析中表现出色&#xf…...

Window下Redis的安装和部署详细图文教程(Redis的安装和可视化工具的使用)

文章目录 Redis下载地址&#xff1a;一、zip压缩包方式下载安装 1、下载Redis压缩包2、解压到文件夹3、启动Redis服务4、打开Redis客户端进行连接5、使用一些基础操作来测试 二、msi安装包方式下载安装 1、下载Redis安装包2、进行安装3、进行配置4、启动服务5、测试能否正常工…...

什么是交叉熵

交叉熵 定义公式 针对离散变量x的概率分布 p ( x ) p(x) p(x) , q ( x ) q(x) q(x) x 1 x_1 x1​ x 2 x_2 x2​ x 3 x_3 x3​ x 4 x_4 x4​… x n x_n xn​p( x 1 x_1 x1​)p( x 2 x_2 x2​)p( x 3 x_3 x3​)p( x 4 x_4 x4​)…p( x n x_n xn​)q( x 1 x_1 x1​)q( x 2 x_2 …...

虚拟机安装k8s集群

环境准备 - 主节点&#xff08;Master Node&#xff09;: IP地址: 192.168.40.100主机名: k8s-master - 工作节点&#xff08;Worker Node&#xff09;: IP地址: 192.168.40.101主机名: k8s-node1 步骤 1: 配置虚拟机环境 1.1 设置主机名 在每台虚拟机上设置唯一的主机名…...

【mysql部署】在ubuntu22.04上安装和配置mysql教程

一.安装mysql 1. 更新软件包列表: sudo apt-get update2.安装 MySQL 服务器&#xff1a; sudo apt-get install mysql-server3.设置 MySQL 安全性&#xff1a; sudo mysql_secure_installation按照提示输入相关问题的回答&#xff0c;例如删除匿名用户、禁止 root 远程登录…...

机器学习实战(3):线性回归——预测连续变量

第3集&#xff1a;线性回归——预测连续变量 在机器学习的世界中&#xff0c;线性回归是最基础、最直观的算法之一。它用于解决回归问题&#xff0c;即预测连续变量&#xff08;如房价、销售额等&#xff09;。尽管简单&#xff0c;但线性回归却是许多复杂模型的基石。今天我们…...

烧结银在 DeepSeek 中的关键作用与应用前景

烧结银在 DeepSeek 中的关键作用与应用前景 在科技飞速发展的当下&#xff0c;DeepSeek 作为前沿科技领域的重要参与者&#xff0c;正以其独特的技术和创新的应用&#xff0c;在众多行业掀起变革的浪潮。而在 DeepSeek 的核心技术体系中&#xff0c;烧结银这一材料的应用&#…...

C++效率掌握之STL库:string底层剖析

文章目录 1.学习string底层的必要性2.string类对象基本函数实现3.string类对象的遍历4.string类对象的扩容追加5.string类对象的插入、删除6.string类对象的查找、提取、大小调整7.string类对象的流输出、流提取希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力…...

计算机组成原理—— 总线系统(十一)

在追求梦想的旅途中&#xff0c;我们常常会遇到崎岖的道路和难以预料的风暴。然而&#xff0c;正是这些挑战塑造了我们的坚韧和毅力&#xff0c;使我们能够超越自我&#xff0c;触及那些看似遥不可及的目标。不要因为一时的困境而气馁&#xff0c;也不要因为他人的质疑而动摇自…...