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

上海网站的优化公司哪家好wordpress后台速度慢

上海网站的优化公司哪家好,wordpress后台速度慢,wordpress搜索标题,昆明网站策划概述 主要模块分析 参数解析与初始化 功能#xff1a;解析命令行参数#xff0c;设置训练配置项目经理制定详细的施工计划和资源分配日志记录与监控 功能#xff1a;初始化日志记录器#xff0c;配置监控系统项目经理使用监控和记录工具#xff0c;实时跟踪施工进度和质量…概述 主要模块分析 参数解析与初始化 功能解析命令行参数设置训练配置项目经理制定详细的施工计划和资源分配日志记录与监控 功能初始化日志记录器配置监控系统项目经理使用监控和记录工具实时跟踪施工进度和质量模型与数据加载 功能加载模型权重和配置文件准备训练数据项目经理选择建筑设计方案准备施工材料和组织施工队伍优化器与学习率调度器设置 功能设置优化器和学习率调度器指导模型参数更新项目经理分配施工资源制定施工进度计划训练循环 功能执行模型的前向传播、损失计算、反向传播和参数更新施工队每日执行施工任务项目经理监控进度和质量验证与评估 功能定期验证模型性能评估训练效果项目经理进行阶段性质量检查评估施工质量和进度模型保存与早停机制 功能保存模型状态应用早停机制优化训练过程项目经理记录施工进度和质量决定是否调整或终止施工计划 主要模块 参数解析与初始化 一般在训练模型的时候需要在这里调整相应的参数这类似于建筑项目经理制定详细的施工计划和资源分配 常用设置参数 --weights模型初始权重路径通常设置为预训练模型路径例如YOLOve.pt--cfg模型结构的 YAML 配置文件路径例如yolov3.yaml--data数据集配置文件路径定义训练/验证数据集的路径和类别等信息--hyp超参数配置文件路径控制训练的优化器、学习率等超参数--epochs训练的总轮数决定训练时长--batch-size批量大小影响内存占用和训练速度--imgsz输入图像的尺寸--device指定使用的设备0就表示GPU0--adam是否使用 Adam 优化器默认使用 SGD WB 参数类似项目中的监控和记录工具 --entity设置 WB 的实体名称用于项目关联--upload_dataset是否将数据集上传到 WB Artifact Table--bbox_interval控制目标框日志记录的间隔 def parse_opt(knownFalse):函数功能用于解析命令行参数设置训练、验证和测试时的超参数及其他相关配置。参数:known (bool): 是否只解析已知的命令行参数。如果为 True则返回已知参数忽略其他参数。返回:argparse.Namespace: 包含解析后参数的命名空间对象 opt。import argparse# 创建 ArgumentParser 对象parser argparse.ArgumentParser()# ---------------------------- 常用参数配置 ----------------------------------# 权重文件路径parser.add_argument(--weights, typestr, defaultROOT / weight/yolov3.pt,helpinitial weights path (初始权重文件路径))# 模型配置文件路径parser.add_argument(--cfg, typestr, defaultmodels/yolov3.yaml,helpmodel.yaml path (模型结构配置文件路径))# 数据集配置文件路径parser.add_argument(--data, typestr, defaultROOT / data/you.yaml,helpdataset.yaml path (数据集配置文件路径))# 超参数配置文件路径parser.add_argument(--hyp, typestr, defaultROOT / data/hyps/hyp.scratch.yaml,helphyperparameters path (超参数配置文件路径))# 训练周期数parser.add_argument(--epochs, typeint, default20,helpNumber of epochs to train (训练的总轮数))# 批量大小parser.add_argument(--batch-size, typeint, default4,helpTotal batch size for all GPUs, -1 for autobatch (总的批量大小))# 图像大小parser.add_argument(--imgsz, --img, --img-size, typeint, default416,helptrain, val image size (pixels) (训练和验证时图像的输入尺寸))# 是否使用矩形训练parser.add_argument(--rect, actionstore_true, defaultTrue,helprectangular training (是否使用矩形训练))# 是否恢复最近一次的训练parser.add_argument(--resume, nargs?, constTrue, default,helpresume most recent training (恢复最近的训练检查点))# 仅保存最终的检查点parser.add_argument(--nosave, actionstore_true,helponly save final checkpoint (只保存最终检查点))# 仅验证最终周期parser.add_argument(--noval, actionstore_true,helponly validate final epoch (只在最后一轮进行验证))# 是否禁用自动生成 anchorsparser.add_argument(--noautoanchor, actionstore_true,helpdisable autoanchor check (禁用自动生成 anchor 的功能))# 超参数进化parser.add_argument(--evolve, typeint, nargs?, const300,helpevolve hyperparameters for x generations (超参数进化代数))# Google Cloud Bucketparser.add_argument(--bucket, typestr, default,helpgsutil bucket (Google 云存储桶路径))# 是否缓存数据集到 RAM 或磁盘parser.add_argument(--cache, typestr, nargs?, constram, defaultTrue,help--cache images in ram (default) or disk (缓存数据集))# 是否使用加权的图像选择训练parser.add_argument(--image-weights, actionstore_true,helpuse weighted image selection for training (训练时使用加权图像选择))# 指定训练的设备parser.add_argument(--device, default,helpcuda device, i.e. 0 or 0,1,2,3 or cpu (指定训练的设备))# 是否启用多尺度训练parser.add_argument(--multi-scale, actionstore_true,helpvary img-size /- 50%% (多尺度训练))# 将多类别数据作为单类别训练parser.add_argument(--single-cls, actionstore_true,helptrain multi-class data as single-class (单类别训练))# 是否使用 Adam 优化器parser.add_argument(--adam, actionstore_true,helpuse torch.optim.Adam() optimizer (使用 Adam 优化器))# 是否启用同步 BatchNormparser.add_argument(--sync-bn, actionstore_true,helpuse SyncBatchNorm, only available in DDP mode (同步 BatchNorm仅适用于 DDP 模式))# 数据加载器的最大工作线程数parser.add_argument(--workers, typeint, default1,helpmax dataloader workers (per RANK in DDP mode) (最大数据加载线程数))# 项目保存目录parser.add_argument(--project, defaultROOT / runs/train,helpsave to project/name (项目保存路径))# 保存的实验名称parser.add_argument(--name, defaultexp,helpsave to project/name (实验保存名称))# 是否允许覆盖现有项目parser.add_argument(--exist-ok, actionstore_true,helpexisting project/name ok, do not increment (允许覆盖现有项目名称))# 是否使用四元数据加载器parser.add_argument(--quad, actionstore_true,helpquad dataloader (启用四元数据加载器))# 是否使用线性学习率parser.add_argument(--linear-lr, actionstore_true,helplinear LR (启用线性学习率))# 标签平滑参数parser.add_argument(--label-smoothing, typefloat, default0.0,helpLabel smoothing epsilon (标签平滑参数 epsilon))# 提前停止的容忍轮数parser.add_argument(--patience, typeint, default1000,helpEarlyStopping patience (epochs without improvement) (提前停止的容忍轮数))# 冻结的层数parser.add_argument(--freeze, typeint, default0,helpNumber of layers to freeze. backbone10, all24 (冻结层数))# 检查点保存间隔parser.add_argument(--save-period, typeint, default-1,helpSave checkpoint every x epochs (disabled if 1) (每隔几轮保存一次检查点))# 本地进程排名DDP 模式用parser.add_argument(--local_rank, typeint, default-1,helpDDP parameter, do not modify (DDP 模式的进程排名))# ---------------------------- WBWeights Biases参数配置 ----------------------------parser.add_argument(--entity, defaultNone,helpWB: Entity (WB 实体名称))parser.add_argument(--upload_dataset, actionstore_true,helpWB: Upload dataset as artifact table (上传数据集到 WB Artifact Table))parser.add_argument(--bbox_interval, typeint, default-1,helpWB: Set bounding-box image logging interval (设置目标框日志记录间隔))parser.add_argument(--artifact_alias, typestr, defaultlatest,helpWB: Version of dataset artifact to use (使用的数据集版本别名))# ---------------------------- 参数解析 ----------------------------opt parser.parse_known_args()[0] if known else parser.parse_args()return opt 日志记录与监控 初始化日志记录器配置日志系统并注册回调函数。这类似于建筑项目中的监控和记录系统用于实时跟踪施工进度和质量 # 判断是否是主进程RANK -1 表示单机训练RANK 0 表示分布式训练的主进程 if RANK in [-1, 0]: # **Step 1: 初始化日志记录器**# 创建 Loggers 对象用于管理训练过程的日志包括本地日志和 WB 日志。# 参数说明# - save_dir: 日志文件和模型保存的路径。# - weights: 模型权重文件的路径。# - opt: 训练过程中所有配置的参数。# - hyp: 超参数配置。# - LOGGER: 用于打印日志到控制台的日志记录器。loggers Loggers(save_dir, weights, opt, hyp, LOGGER)# **Step 2: WB 特定处理**# 如果启用了 WBWeights Biases日志记录功能if loggers.wandb:# 获取 WB 数据字典用于记录训练数据相关信息data_dict loggers.wandb.data_dict# 如果恢复训练resume 参数为 Trueif resume:# 使用恢复的权重、训练轮数和超参数覆盖当前的 opt 配置weights, epochs, hyp opt.weights, opt.epochs, opt.hyp# **Step 3: 注册回调函数**# 遍历 loggers 中所有的方法methods(loggers) 返回可用方法的列表for k in methods(loggers):# 将每个方法作为回调函数注册到 callbacks 中# 参数说明# - k: 回调方法的名称如 on_train_start, on_epoch_end 等。# - callback: 对应的回调函数通过 getattr 获取 loggers 中的方法。callbacks.register_action(k, callbackgetattr(loggers, k)) 模型与数据加载 加载模型权重和配置文件设置模型参数加载训练数据。这类似于建筑项目中选择建筑设计方案、准备施工材料和组织施工队伍 分析该部分代码属于yolov3结构中的哪个阶段 主要发生在训练前的准备工作也就是还没有进入模型的前向传播或者反向传播阶段 运行逻辑分析 模型加载与构建 如果提供预训练权重加载模型并初始化参数如果没有提供权重则根据配置文件构建新模型冻结层设置 固定部分参数如 Backbone 层以适应迁移学习或微调场景训练数据准备 创建数据加载器支持多线程加载、数据增强和分布式训练 分析冻结层的使用场景 冻结Backbone 例如之前已经从大规模的数据中学到了一些通用特则会给你那么通过冻结Backbone的参数仅仅训练Detection Head用于适配新的任务和类别即可冻结全部层 这种场景仅仅适合在微调检测头的时候使用对于小规模数据集如只有少量的目标类别可以冻结所有 Backbone 层只训练最后的预测头根据自己的需求进行冻结冻结就是利用已经预训练的特征提取能力然后让其在新的数据集上可以实现高效的训练 # ------------------------------- 模型部分 -------------------------------# 检查权重文件的后缀是否为 .ptPyTorch 模型格式 check_suffix(weights, .pt) # 判断是否加载预训练模型 pretrained weights.endswith(.pt) if pretrained: # 如果加载的是预训练模型# 确保在分布式训练中只由一个进程下载权重文件避免冲突with torch_distributed_zero_first(LOCAL_RANK):weights attempt_download(weights) # 下载或加载指定的权重文件# 加载权重文件到内存并指定加载到的设备如 GPU 或 CPUckpt torch.load(weights, map_locationdevice) # 创建模型对象# - 如果提供了 cfg 文件则使用 cfg 文件构建模型# - 否则使用权重文件中的模型配置ckpt[model].yamlmodel Model(cfg or ckpt[model].yaml, ch3, ncnc, anchorshyp.get(anchors)).to(device) # 定义要排除的参数如 anchor 参数# - 如果提供了 cfg 文件或 hyperparameters 中指定了 anchor 配置并且不是恢复训练模式则排除 anchor 参数。exclude [anchor] if (cfg or hyp.get(anchors)) and not resume else []# 加载预训练模型的参数csd ckpt[model].float().state_dict() # 从权重文件中提取模型的状态字典csd intersect_dicts(csd, model.state_dict(), excludeexclude) # 匹配当前模型的参数并排除指定的参数model.load_state_dict(csd, strictFalse) # 将预训练权重加载到模型中允许部分参数不匹配# 打印日志显示加载的参数数量与模型参数总数量LOGGER.info(f从 {weights} 转移了 {len(csd)}/{len(model.state_dict())} 项) else: # 如果没有加载预训练模型则从头构建一个新模型model Model(cfg, ch3, ncnc, anchorshyp.get(anchors)).to(device) # ------------------------------- 冻结层部分 -------------------------------# 冻结部分模型层的参数以防止它们在训练过程中更新 # 生成冻结层的层名前缀列表例如[model.0., model.1., ..., model.N.] freeze [fmodel.{x}. for x in range(freeze)] # 遍历模型中的所有参数键值对参数名称和参数值 for k, v in model.named_parameters():v.requires_grad True # 默认所有参数可训练# 如果当前参数的名称包含在冻结层列表中if any(x in k for x in freeze):LOGGER.info(f冻结 {k}) # 打印冻结的参数名称v.requires_grad False # 禁止该参数的梯度更新冻结参数# ------------------------------- 数据加载部分 -------------------------------# 创建训练数据加载器train_loader和数据集对象dataset train_loader, dataset create_dataloader(train_path, # 训练数据的路径imgsz, # 输入图像的大小batch_size // WORLD_SIZE, # 每个 GPU 的批量大小在分布式训练中批量大小会被划分gs, # 网格大小grid size用于确保图像大小是网格的倍数single_cls, # 是否将多类数据当作单类数据处理hyphyp, # 超参数配置augmentTrue, # 是否进行数据增强cacheopt.cache, # 是否缓存数据到内存或磁盘rectopt.rect, # 是否使用矩形训练rankLOCAL_RANK, # 分布式训练时的本地进程编号workersworkers, # 数据加载线程数image_weightsopt.image_weights, # 是否加权选择图像quadopt.quad, # 是否启用四元数据加载器prefixcolorstr(train: ), # 日志前缀shuffleTrue # 是否对数据进行随机打乱 ) 优化器与学习率调度器设置 理解优化器和学习率调度器 优化器设置类似于项目经理分配施工资源如劳动力、设备选择适当的施工方法如快速建造或精细施工学习率调度器对应于施工进度计划决定资源的使用速度和调整施工节奏以确保建筑按时完成且质量达标 # ------------------------------- 优化器设置 -------------------------------# 计算梯度累积步数Accumulate Step # nbs: 基准批量大小64是一个参考值 nbs 64 # 计算当前的累积步数公式为基准批量大小 / 当前批量大小最小值为 1 accumulate max(round(nbs / batch_size), 1) # 根据批量大小和累积步数调整权重衰减Weight Decay # 如果批量大小变大适当放大权重衰减反之则缩小权重衰减。 hyp[weight_decay] * batch_size * accumulate / nbs LOGGER.info(fScaled weight_decay {hyp[weight_decay]}) # 打印调整后的权重衰减值# ------------------------------- 参数分组 -------------------------------# 将模型的参数分为三类 # g0: BatchNorm 的权重 # g1: 卷积层或全连接层的权重 # g2: 偏置bias g0, g1, g2 [], [], [] # 初始化三个参数组 for v in model.modules(): # 遍历模型中的每个模块# 如果模块有偏置参数bias并且是 nn.Parameter 类型则将其加入 g2if hasattr(v, bias) and isinstance(v.bias, nn.Parameter):g2.append(v.bias)# 如果模块是 BatchNorm2d则将其权重加入 g0if isinstance(v, nn.BatchNorm2d):g0.append(v.weight)# 如果模块有权重参数weight并且是 nn.Parameter 类型则将其加入 g1elif hasattr(v, weight) and isinstance(v.weight, nn.Parameter):g1.append(v.weight)# ------------------------------- 优化器设置 -------------------------------# 如果使用 Adam 优化器 if opt.adam:# 创建 Adam 优化器optimizer Adam(g0, lrhyp[lr0], betas(hyp[momentum], 0.999)) else:# 否则使用 SGD 优化器optimizer SGD(g0, lrhyp[lr0], momentumhyp[momentum], nesterovTrue) # 使用 Nesterov 动量# 为优化器添加参数组 # 添加 g1 参数组并设置 weight_decay 为超参数中的值 optimizer.add_param_group({params: g1, weight_decay: hyp[weight_decay]}) # 添加 g2 参数组偏置不使用权重衰减 optimizer.add_param_group({params: g2}) # ------------------------------- 学习率调度器 -------------------------------# 定义学习率调度器的变化方式scheduler if opt.linear_lr:# 如果使用线性学习率定义线性衰减函数# 公式初始学习率从 (1 - x) 减少到 lrf最低学习率比例lf lambda x: (1 - x / (epochs - 1)) * (1.0 - hyp[lrf]) hyp[lrf] else:# 否则使用 One-Cycle 学习率调度器lf one_cycle(1, hyp[lrf], epochs) # 创建学习率调度器基于上述的学习率变化函数 lf scheduler lr_scheduler.LambdaLR(optimizer, lr_lambdalf) 训练循环核心 主要阶段总结 训练循环类似于施工队每日的施工任务包括材料的使用、施工进度的监控、质量的检查以及资源的优化配置热身阶段类似于施工队初期的准备工作逐步适应施工环境和进度多尺度训练类似于根据不同施工需求调整施工方法和材料以适应不同的建筑部分和设计要求前向传播与损失计算对应于施工过程中的质量检查和评估确保每一步施工符合设计标准反向传播与优化类似于根据质量检查结果调整施工方法和资源分配以提高施工效率和建筑质量日志记录类似于施工日志和进度报告实时记录施工进展和遇到的问题学习率调度对应于施工进度的动态调整和优化根据施工进展和质量要求调整施工节奏验证与评估类似于阶段性质量检查和最终验收确保建筑物的整体质量和功能 # ---------------------- 训练循环 ---------------------- for epoch in range(start_epoch, epochs): # 遍历每个 epochmodel.train() # 设置模型为训练模式if opt.image_weights: # 如果启用了类别权重调整# 根据类别权重和映射关系调整样本权重cw model.class_weights.cpu().numpy() * (1 - maps) ** 2 / nc iw labels_to_image_weights(dataset.labels, ncnc, class_weightscw) dataset.indices random.choices(range(dataset.n), weightsiw, kdataset.n) # 根据权重重采样数据集mloss torch.zeros(3, devicedevice) # 初始化平均损失记录 (box_loss, obj_loss, cls_loss)if RANK ! -1: # 如果是分布式训练模式train_loader.sampler.set_epoch(epoch) # 设置当前 epoch确保分布式训练的数据加载一致# 进度条设置pbar enumerate(train_loader) # 枚举数据加载器print((\n %10s * 7) % (Epoch, gpu_mem, box, obj, cls, labels, img_size)) # 打印标题行if RANK in [-1, 0]: # 如果是主进程# 显示训练进度条pbar tqdm(pbar, totalnb, ncolsNCOLS, bar_format{l_bar}{bar:10}{r_bar}{bar:-10b}) optimizer.zero_grad() # 优化器梯度清零for i, (imgs, targets, paths, _) in pbar: # 遍历批次数据ni i nb * epoch # 计算全局迭代步数imgs imgs.to(device, non_blockingTrue).float() / 255 # 将图像归一化到 [0,1] 并移到设备上# -------------------- 热身阶段 --------------------if ni nw: # 如果在热身阶段xi [0, nw] # 热身范围# 动态调整累积步数accumulate和学习率accumulate max(1, np.interp(ni, xi, [1, nbs / batch_size]).round()) for j, x in enumerate(optimizer.param_groups): # 遍历优化器的参数组# 动态调整学习率x[lr] np.interp(ni, xi, [hyp[warmup_bias_lr] if j 2 else 0.0, x[initial_lr] * lf(epoch)])# 动态调整动量if momentum in x:x[momentum] np.interp(ni, xi, [hyp[warmup_momentum], hyp[momentum]])# -------------------- 多尺度训练 --------------------if opt.multi_scale: # 如果启用了多尺度训练# 随机生成新的训练图像尺寸sz random.randrange(imgsz * 0.5, imgsz * 1.5 gs) // gs * gs sf sz / max(imgs.shape[2:]) # 缩放因子if sf ! 1: # 如果需要缩放# 计算新的图像尺寸并调整ns [math.ceil(x * sf / gs) * gs for x in imgs.shape[2:]] imgs nn.functional.interpolate(imgs, sizens, modebilinear, align_cornersFalse) # -------------------- 前向传播 --------------------with amp.autocast(enabledcuda): # 混合精度加速pred model(imgs) # 模型前向传播loss, loss_items compute_loss(pred, targets.to(device)) # 计算损失if RANK ! -1: # 如果是分布式训练loss * WORLD_SIZE # 按照分布式规模调整损失# -------------------- 反向传播 --------------------scaler.scale(loss).backward() # 使用梯度缩放反向传播# -------------------- 参数更新 --------------------if ni - last_opt_step accumulate: # 如果满足累积步数条件scaler.step(optimizer) # 更新优化器参数scaler.update() # 更新梯度缩放比例optimizer.zero_grad() # 清零梯度if ema: # 如果启用了 EMAema.update(model) # 更新模型的指数移动平均last_opt_step ni # 更新最后一次优化步数# -------------------- 日志记录 --------------------if RANK in [-1, 0]: # 如果是主进程# 动态更新平均损失mloss (mloss * i loss_items) / (i 1) mem f{torch.cuda.memory_reserved() / 1E9 if torch.cuda.is_available() else 0:.3g}G # 显存使用量# 更新进度条显示内容pbar.set_description((%10s * 2 %10.4g * 5) % (f{epoch}/{epochs - 1}, mem, *mloss, targets.shape[0], imgs.shape[-1]))# -------------------- 学习率调度 --------------------lr [x[lr] for x in optimizer.param_groups] # 获取当前学习率scheduler.step() # 更新学习率调度器# -------------------- 评估与保存 --------------------if RANK in [-1, 0]: # 如果是主进程callbacks.run(on_train_epoch_end, epochepoch) # 运行训练结束的回调ema.update_attr(model, include[yaml, nc, hyp, names, stride, class_weights]) # 更新 EMA 属性final_epoch (epoch 1 epochs) or stopper.possible_stop # 检查是否是最后一个 epochif not noval or final_epoch: # 如果需要验证# 运行验证并获取验证结果results, maps, _ val.run(data_dict,batch_sizebatch_size // WORLD_SIZE * 2,imgszimgsz,modelema.ema,single_clssingle_cls,dataloaderval_loader,save_dirsave_dir,plotsFalse,callbackscallbacks,compute_losscompute_loss)# 更新最佳 mAPfi fitness(np.array(results).reshape(1, -1)) # 计算当前结果的 fitnessif fi best_fitness: # 如果当前 fitness 是最优的best_fitness fi # 更新最佳 fitnesslog_vals list(mloss) list(results) lr # 记录日志值callbacks.run(on_fit_epoch_end, log_vals, epoch, best_fitness, fi) # 运行回调# 保存模型if (not nosave) or (final_epoch and not evolve): # 如果需要保存模型ckpt {epoch: epoch, # 记录当前 epochbest_fitness: best_fitness, # 最佳 fitnessmodel: deepcopy(de_parallel(model)).half(), # 模型参数ema: deepcopy(ema.ema).half(), # EMA 参数updates: ema.updates, # EMA 更新次数optimizer: optimizer.state_dict(), # 优化器状态wandb_id: loggers.wandb.wandb_run.id if loggers.wandb else None, # WB 运行 IDdate: datetime.now().isoformat()} # 保存日期torch.save(ckpt, last) # 保存为最后一次权重文件if best_fitness fi: # 如果当前 fitness 是最优的torch.save(ckpt, best) # 保存为最佳权重文件if (epoch 0) and (opt.save_period 0) and (epoch % opt.save_period 0): # 按周期保存权重torch.save(ckpt, w / fepoch{epoch}.pt) del ckpt # 删除检查点释放内存callbacks.run(on_model_save, last, epoch, final_epoch, best_fitness, fi) # 运行回调# 提前停止仅在单 GPU 模式下if RANK -1 and stopper(epochepoch, fitnessfi): # 如果满足提前停止条件break # 停止训练 验证与评估 在每个训练周期结束后对模型进行验证评估其在验证集上的性能如mAP。这类似于建筑项目中的阶段性质量检查和评估确保施工质量符合设计要求 if RANK in [-1, 0]: # 检查当前设备是否为主进程单GPU模式或主节点# 调用验证函数 val.run()对当前模型在验证集上的性能进行评估results, maps, _ val.run(data_dict, # 数据集的配置信息包含训练、验证和测试数据的路径batch_sizebatch_size // WORLD_SIZE * 2, # 验证集的批次大小调整为全局批量大小batch_size除以总进程数 WORLD_SIZE再乘以 2imgszimgsz, # 输入图像的尺寸modelema.ema, # 使用 EMA指数移动平均模型的权重进行评估以获得更平滑和稳定的验证性能single_clssingle_cls, # 是否将多类别数据视为单类别任务用于单类别检测dataloaderval_loader, # 验证集的数据加载器save_dirsave_dir, # 保存结果的路径用于存储验证过程的日志或可视化图表plotsFalse, # 是否生成验证结果的可视化图表设置为 False 表示不生成callbackscallbacks, # 回调函数用于扩展验证过程例如记录日志或自定义处理compute_losscompute_loss # 损失函数用于计算验证过程中的损失值) 模型保存与早停机制 据训练过程中的表现保存当前模型的状态如最佳模型、最新模型等。同时通过早停机制在模型性能不再提升时提前终止训练 模型保存项目经理定期记录施工进度和质量状况保存关键的施工记录和里程碑早停机制如果发现施工质量无法满足要求或项目进度严重滞后项目经理决定提前终止或调整施工计划以避免资源浪费和进一步的问题 # 保存模型 if (not nosave) or (final_epoch and not evolve): # 检查是否需要保存模型# 构建一个检查点字典用于保存模型的状态和相关信息ckpt {epoch: epoch, # 当前的训练轮次best_fitness: best_fitness, # 当前训练过程中模型的最佳 fitness如 mAPmodel: deepcopy(de_parallel(model)).half(), # 深拷贝模型的状态转换为半精度以减少存储需求ema: deepcopy(ema.ema).half(), # 深拷贝 EMA指数移动平均模型的状态updates: ema.updates, # EMA 更新的次数optimizer: optimizer.state_dict(), # 优化器的状态字典保存优化器参数和学习率等信息wandb_id: loggers.wandb.wandb_run.id if loggers.wandb else None, # WB 运行 ID如果使用 WBdate: datetime.now().isoformat() # 保存当前时间的时间戳用于记录模型保存时间}# 保存最新的模型权重到指定路径 lasttorch.save(ckpt, last)# 如果当前的 fitness 指标是最佳值则保存模型到 best 路径if best_fitness fi:torch.save(ckpt, best)# 如果训练轮次大于 0 且保存周期 save_period 大于 0并且当前轮次是保存周期的倍数# 则保存当前轮次的模型权重到以 epoch{轮次}.pt 命名的文件if (epoch 0) and (opt.save_period 0) and (epoch % opt.save_period 0):torch.save(ckpt, w / fepoch{epoch}.pt) # 保存到指定路径# 删除保存的检查点对象以释放内存del ckpt# 触发 on_model_save 回调函数通知其他组件模型已保存callbacks.run(on_model_save, last, epoch, final_epoch, best_fitness, fi)# 单 GPU 模式下的提前停止机制 if RANK -1 and stopper(epochepoch, fitnessfi): # 如果是单 GPU 模式并且达到提前停止条件break # 停止训练结束当前循环
http://www.tj-hxxt.cn/news/216568.html

相关文章:

  • 筑云网站投诉最新新闻热点事件简短
  • 网站设计的优点和缺点北京市建设投标网站
  • 商贸公司寮步网站建设网页设计作业html博物馆免费
  • 大气手机网站模板网站建设手机端是什么意思
  • 图片预览网站 末班wordpress怎么看
  • 呼和浩特做网站公司胶州市 网站建设
  • 自做网站好做吗学网站开发去哪学
  • 怎样做好网站用户体验推广公司组织架构
  • 网站建设运营费计入什么科目汉中软件开发公司
  • 浙江网站建设价格费用外贸汽车网站制作
  • 网站推广排名收费标准wordpress类
  • 商品网站建设方案如何建设部网站查职称
  • 徐汇网站推广上海兼职做网站
  • 电子商务网站设计网上营销活动
  • 旅游型网站的建设背景wordpress 产品展示主题
  • 网站建设前规划网站建设分析方法
  • 旅游网站域名应该如何设计上海虹口网站制作
  • 做网站首选九零后网络优质网站建设公司哪家好
  • 网站建设+开源有名的网站建设电话
  • 大兴德艺网站建设上海网页制作与设计电话
  • 书画网站免费源码为什么做儿童音乐网站
  • 广州网站建设+美词网址链接生成器
  • h网站模板湖南北山建设集团网站
  • 网站设计公司建设网站开办网站需要什么资质
  • 做商城网站的企业公司网站文章的排版
  • 学习网站 现状看片代码 python
  • 手机手机端网站建设wordpress 不能提交评论
  • 西安网站建设资讯今天发生的新闻
  • 优化网站seo策略h5建站系统源码
  • 飞沐网站建设公司网站建设与维护实训总结