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

做网站 怎么赚钱吗安乡网站制作

做网站 怎么赚钱吗,安乡网站制作,青海住房和城乡建设厅网站,wordpress主题投稿#x1f341;#x1f341;#x1f341;图像分割实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 上篇内容#xff1a; unet医学细胞分割实战1 下篇内容#xff1a; unet医学细胞分割实战3 3、指…图像分割实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 上篇内容 unet医学细胞分割实战1 下篇内容 unet医学细胞分割实战3 3、指定训练参数 指定参数 --dataset dsb2018_96 --arch NestedUNet指定数据集和网络架构的参数后执行train.py 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返回图像数据路径返回掩码数据路径返回后缀返回掩码后缀分类的种类数据增强这里制定为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医学细胞分割实战3
http://www.zqtcl.cn/news/231341/

相关文章:

  • 国外展览展示设计网站沧州网络推广管理公司
  • 物流信息平台网站建设深圳做手机网站建设
  • 品牌型网站的特点领导视察网站建设
  • 如何自己做网站推广淘宝客佛山小程序开发公司
  • 天津市建设局网站口碑营销相关案例
  • 怎么有自己的网站厂字形网页布局网站
  • 广州市财贸建设开发监理网站工程建设企业等采用
  • 网站建设规模设想自己建立网站教程
  • 兰溪建设局网站门户网站建设招标
  • 用wp做网站备案怎么查自己的邮箱号
  • 苏州企业网站建设公司价格数字媒体应用 网站开发
  • 西宁做网站seo四川省的住房和城乡建设厅网站首页
  • 响应式网站 有哪些弊端可以发广告的网站
  • wordpress 漫画站wordpress加目录
  • 天津商城网站制作深圳品牌网站设计公司
  • 初学网站开发上海市普陀区建设规划局网站
  • 网站开发完成后如何发布做网站用vs还是dw
  • 怎么看网站是否备案可信赖的菏泽网站建设
  • 做网站的优点系统软件开发服务
  • 深圳品牌营销网站建设尚品中国网站
  • 新建网站怎么做关键词南阳手机网站制作
  • 宁波网站建设应届生公司网站备案需要每年做吗
  • 汽车设计网站论坛网站 备案
  • 网站源码带手机版展示型网站首页设计解析
  • 备案的网站名称能重复备案吗为什么打开Wordpress很慢
  • vps网站建设个人网站二级域名做淘宝客
  • 用cms织梦做网站图文教程wordpress分类文章排序
  • 台州网站策划云南招聘网
  • 网站如何设定关键词wordpress 文章关联
  • 京津冀网站建设公司建设监理工程师网站