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

用vue做的网站优秀的学校网站欣赏

用vue做的网站,优秀的学校网站欣赏,南昌做网站哪个公司好,一个完整的项目策划书#x1f341;#x1f341;#x1f341;图像分割实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 unet医学细胞分割实战1 unet医学细胞分割实战2 unet医学细胞分割实战3 unet医学细胞分割实战4 unet…图像分割实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 unet医学细胞分割实战1 unet医学细胞分割实战2 unet医学细胞分割实战3 unet医学细胞分割实战4 unet医学细胞分割实战5 unet医学细胞分割实战6 4、train.py主函数解析 4.1 读取配置文件 def main():config vars(parse_args())if config[name] is None:if config[deep_supervision]:config[name] %s_%s_wDS % (config[dataset], config[arch])else:config[name] %s_%s_woDS % (config[dataset], config[arch])os.makedirs(models/%s % config[name], exist_okTrue)print(- * 20)for key in config:print(%s: %s % (key, config[key]))print(- * 20)with open(models/%s/config.yml % config[name], w) as f:yaml.dump(config, f)main函数解析命令行参数为字典检查 config[‘name’] 是否为 None如果是它根据 config[‘deep_supervision’] 的布尔值来设置 config[‘name’] 如果config[‘deep_supervision’] 的值为Trueconfig[‘dataset’] 和 config[‘arch’] 的值并在末尾添加 ‘_wDS’表示“with Deep Supervision”如果为False末尾则添加 ‘_woDS’表示“without Deep Supervision”使用 config[‘name’] 来创建一个新目录。这个目录位于 ‘models/’ 目录下目录名是 config[‘name’] 的值exist_okTrue 参数的意思是如果目录已经存在则不会抛出错误打印符号打印所有配置参数的名字和默认值打印符号根据模型名称创建一个.yaml文件把所有配置信息全部写入文件中 4.2 定义模型参数 if config[loss] BCEWithLogitsLoss:criterion nn.BCEWithLogitsLoss().cuda()#WithLogits 就是先将输出结果经过sigmoid再交叉熵 else:criterion losses.__dict__[config[loss]]().cuda() cudnn.benchmark True print( creating model %s % config[arch]) model archs.__dict__[config[arch]](config[num_classes], config[input_channels], config[deep_supervision]) model model.cuda() params filter(lambda p: p.requires_grad, model.parameters())定义损失函数如果损失函数的配置的默认字符参数为BCEWithLogitsLoss那么使用 PyTorch 中的 nn.BCEWithLogitsLoss 作为损失函数并且将损失函数的计算移入到GPU中计算加快速度如果不是则从 losses.__dict__ 中查找对应的损失函数同样使用 .cuda() 方法将损失函数移动到 GPU。losses.__dict__ 应该是一个包含了多种损失函数的字典其中键是损失函数的名称值是相应的损失函数类这个类是我们自己写的在后面会解析启用 CUDA 深度神经网络cuDNN的自动调优器当设置为 True 时cuDNN 会自动寻找最适合当前配置的算法来优化运行效率这在使用固定尺寸的输入数据时往往可以加快训练速度打印当前创建的模型的名字动态实例化一个模型 archs 是一个包含多个网络架构的模块 archs.__dict__[config[arch]] 这部分代码通过查找 archs 对象的 __dict__ 属性来动态地选择一个网络架构 __dict__ 是一个包含对象所有属性的字典。在这里它被用来获取名为 config[arch] 的网络架构类config[arch] 是一个字符串表示所选用的架构名称模型放入GPU中 4.3 定义优化器、调度器等参数 if config[optimizer] Adam:optimizer optim.Adam(params, lrconfig[lr], weight_decayconfig[weight_decay])elif config[optimizer] SGD:optimizer optim.SGD(params, lrconfig[lr], momentumconfig[momentum],nesterovconfig[nesterov], weight_decayconfig[weight_decay])else:raise NotImplementedErrorif config[scheduler] CosineAnnealingLR:scheduler lr_scheduler.CosineAnnealingLR( optimizer, T_maxconfig[epochs], eta_minconfig[min_lr])elif config[scheduler] ReduceLROnPlateau:scheduler lr_scheduler.ReduceLROnPlateau(optimizer, factorconfig[factor], patienceconfig[patience],verbose1, min_lrconfig[min_lr])elif config[scheduler] MultiStepLR:scheduler lr_scheduler.MultiStepLR(optimizer, milestones[int(e) for e in config[milestones].split(,)], gammaconfig[gamma])elif config[scheduler] ConstantLR:scheduler Noneelse:raise NotImplementedError 创建一个过滤器它筛选出神经网络模型中所有需要梯度即可训练的参数 model.parameters()返回模型的权重和偏置lambda p: p.requires_grad: 这是一个匿名函数lambda 函数用于检查每个参数 p 是否需要梯度如果优化器是 Adam则指定参数、学习率、学习率衰减的参数给Adam如果是SGD则指定参数、学习率、学习率衰减的参数给SGD此外还有momentum动量加速此外还使用了一个自定义的类型转换函数 str2bool 来处理输入值如果两者都不是返回错误如果学习率调度器为CosineAnnealingLR给该调度器指定优化器、epochs、最小学习率如果是ReduceLROnPlateau给该调度器指定优化器、指定调整学习率时的乘法因子、指定在性能不再提升时减少学习率要等待多少周期、verbose1: 这个设置意味着调度器会在每次更新学习率时打印一条信息、最小学习率如果是MultiStepLR给该调度器指定优化器、何时降低学习率的周期数、gamma值如果是ConstantLR调度器为None如果都不是返回错误 4.4 数据增强 img_ids glob(os.path.join(inputs, config[dataset], images, * config[img_ext]))img_ids [os.path.splitext(os.path.basename(p))[0] for p in img_ids]train_img_ids, val_img_ids train_test_split(img_ids, test_size0.2, random_state41)train_transform Compose([transforms.RandomRotate90(),transforms.Flip(),OneOf([ transforms.HueSaturationValue(), transforms.RandomBrightness(), transforms.RandomContrast(), ], p1),transforms.Resize(config[input_h], config[input_w]),transforms.Normalize(),])val_transform Compose([transforms.Resize(config[input_h], config[input_w]),transforms.Normalize(),])从本地文件夹inputs根据config[‘dataset’]的值选择一个数据集然后images文件*代表后面所有的文件名称加上config[‘img_ext’]对应的后缀返回一个列表列表的每个元素都是每条数据的路径加文件名和后缀名组成的字符串类似这种形式[‘inputs/dataset_name/images/image1.png’, ‘inputs/dataset_name/images/image2.png’, ‘inputs/dataset_name/images/image3.png’] for p in img_ids按照每个字符串包含的信息进行遍历os.path.basename(p)从每个路径 p 中提取文件名os.path.splitext(...)[0] 则从文件名中去除扩展名留下文件的基本名称即 ID,最后是一个只包含文件名的list即[‘image1’, ‘image2’, ‘image3’] 使用sklearn包的train_test_split函数按照80%和20%的比例分为训练集和验证集并且打乱数据集41是随机种子 训练集数据增强 随机以 90 度的倍数旋转图像进行数据增强 水平或垂直翻转图像进行数据增强 从调整色调和饱和度和值HSV、随机调整图像的亮度、随机调整图像的对比度这个方式中随机选择一个进行数据增强 将图像调整到指定的高度和宽度 对图像进行标准化比如减去均值除以标准差 验证集同样进行调整是为了和训练集的尺寸、标准化等保存一致 调整和训练集一样的长宽 调整和训练一样的 标准化处理 4.5 数据集制作 train_dataset Dataset(img_idstrain_img_ids,img_diros.path.join(inputs, config[dataset], images),mask_diros.path.join(inputs, config[dataset], masks),img_extconfig[img_ext],mask_extconfig[mask_ext],num_classesconfig[num_classes],transformtrain_transform) val_dataset Dataset(img_idsval_img_ids,img_diros.path.join(inputs, config[dataset], images),mask_diros.path.join(inputs, config[dataset], masks),img_extconfig[img_ext],mask_extconfig[mask_ext],num_classesconfig[num_classes],transformval_transform)使用自己写的数据集类制作训练数据集返回图像数据id返回图像数据路径返回掩码数据路径经过数据增强的时候albumentations工具包能够自动的把数据做变换的同时标签也相应的变换返回后缀返回掩码后缀分类的种类数据增强这里制定为None同样的给验证集也来一遍 train_loader torch.utils.data.DataLoader(train_dataset,batch_sizeconfig[batch_size],shuffleTrue,num_workersconfig[num_workers],drop_lastTrue) val_loader torch.utils.data.DataLoader(val_dataset,batch_sizeconfig[batch_size],shuffleFalse,num_workersconfig[num_workers],drop_lastFalse)log OrderedDict([ (epoch, []), (lr, []), (loss, []), (iou, []), (val_loss, []), (val_iou, []), ])制作训练集Dataloader指定训练数据集batch_size洗牌操作进程数不能整除的batch是否就不要了同样的给验证集也来一遍最后一行日志记录创建OrderedDict 对象 log将’epoch’、‘lr’、‘loss’、‘iou’、‘val_loss’、val_iou’按照类似字典的形式进行存储与字典不同的是它会记住插入元素的顺序 4.6 迭代训练 best_iou 0trigger 0for epoch in range(config[epochs]):print(Epoch [%d/%d] % (epoch, config[epochs]))train_log train(config, train_loader, model, criterion, optimizer)val_log validate(config, val_loader, model, criterion)if config[scheduler] CosineAnnealingLR:scheduler.step()elif config[scheduler] ReduceLROnPlateau:scheduler.step(val_log[loss])print(loss %.4f - iou %.4f - val_loss %.4f - val_iou %.4f% (train_log[loss], train_log[iou], val_log[loss], val_log[iou]))log[epoch].append(epoch)log[lr].append(config[lr])log[loss].append(train_log[loss])log[iou].append(train_log[iou])log[val_loss].append(val_log[loss])log[val_iou].append(val_log[iou])pd.DataFrame(log).to_csv(models/%s/log.csv % config[name], indexFalse)trigger 1if val_log[iou] best_iou:torch.save(model.state_dict(), models/%s/model.pth % config[name])best_iou val_log[iou]print( saved best model)trigger 0if config[early_stopping] 0 and trigger config[early_stopping]:print( early stopping)breaktorch.cuda.empty_cache()记录最好的IOU的值trigger 是一个计数器用于追踪自从模型上次改进即达到更好的验证 IoU以来经过了多少个训练周期epochs这种技术通常用于实现早停early stopping机制以避免过度拟合按照epochs进行迭代训练打印当前epochs数即训练进度使用训练函数进行单个epoch的训练使用验证函数进行单个epoch的验证当使用 CosineAnnealingLR 调度器时scheduler.step() 被直接调用无需任何参数当使用 ReduceLROnPlateau 调度器时scheduler.step(val_log[loss]) 调用时传入了验证集的损失 val_log[‘loss’] 作为参数打印当前epoch训练损失、训练iou打印当前epoch验证损失、验证iou当前epoch索引加入日志字典中当前学习率值加入日志字典中当前训练损失加入日志字典中当前训练iou加入日志字典中当前验证损失加入日志字典中当前验证iou加入日志字典中当前日志信息保存为csv文件trigger 1如果当前验证iou的值比当前记录最佳iou的值要好保存当前模型文件更新最佳iou的值打印保存了当前的最好模型把trigger 置0如果当前记录的trigger的值大于提前设置的trigger阈值打印提前停止停止训练清除GPU缓存 自此train.py的main函数部分全部解读完毕其中有多个子函数或者类在下一篇文章中继续解读 unet医学细胞分割实战1 unet医学细胞分割实战2 unet医学细胞分割实战3 unet医学细胞分割实战4 unet医学细胞分割实战5 unet医学细胞分割实战6
http://www.dnsts.com.cn/news/240605.html

相关文章:

  • wordpress 跳转特效台州优化网站
  • 做网站学哪种代码好高速公路建设管理局网站
  • 免费下载模板的网站phpnow超详细WordPress
  • 免费建站网站推广怎么做有效果
  • 电子商务企业网站的建设移动终端网站建设
  • 如何注册一个设计网站好用的手机网站主页
  • 如何给喜欢的明星做网站企业网站 合同
  • 网站开发主流方法做枪版视频网站犯法吗
  • 有什么网站可以免费注册东莞网站建设最优
  • 怎样查找网站域名织梦 网站地图 样式
  • 在线网站建设培训班什么网站访问量
  • 上海网站开发建设找哪家创意产品设计图
  • 松岗做网站公司重庆网站开发哪家好
  • 网站建设600元全包wordpress php 5.2
  • 移动网站优化济宁百姓网免费发布信息网
  • 微信网站制作装饰网站模板下载
  • 百度做的网站后台怎么进吉林省新闻最新头条
  • 海外网深一度广州网站设计专注乐云seo
  • 响应式设计网站昆山网站建设ikelv
  • 广西网站建设产品优化企业网站怎么优化
  • 学校自己做的网站需要买服务器吗郑州正规网站设计价格
  • 网站项目管理系统网站建设授权书
  • 一般网站空间要多大wordpress编辑器百度
  • 凡科网站可以做自适应的吗网站建设支付
  • 视频网站是怎么做权限管理的android用什么语言开发
  • 润滑油东莞网站建设中交通力建设股份有限公司网站
  • 汉中住房和城乡建设部网站网站建设进度时间表
  • jsp在网站开发中的优势我要申请开网店
  • 上海网站建设网站制作成都推广系统
  • 重庆网站建设要点WordPress做漫画网站