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

济南优化推广网站seo十堰网站建设报价

济南优化推广网站seo,十堰网站建设报价,网站流量一直下降,大连网站建设动态一、基础概念#xff08;学习笔记#xff09; #xff08;1#xff09;训练误差和泛化误差[1] 本质上#xff0c;优化和深度学习的目标是根本不同的。前者主要关注的是最小化目标#xff0c;后者则关注在给定有限数据量的情况下寻找合适的模型。训练误差和泛化误差通常不…一、基础概念学习笔记 1训练误差和泛化误差[1] 本质上优化和深度学习的目标是根本不同的。前者主要关注的是最小化目标后者则关注在给定有限数据量的情况下寻找合适的模型。训练误差和泛化误差通常不同由于优化算法的目标函数通常是基于训练数据集的损失函数因此优化的目标是减少训练误差。但是深度学习或更广义地说统计推断的目标是减少泛化误差。 最小化训练误差并不能保证我们找到最佳的参数集来最小化泛化误差。同时对于深度学习而言没有必要找到最优解局部最优解或其近似解仍然非常有用。 个人理解训练误差为训练集每个Epoch的损失泛化误差为验证集对应Epoch的损失。训练集与验证集的精确率曲线对比可以作为验证模型是否过拟合的标志。一段时间内的训练集Epoch精确率曲线不断升高且验证集Epoch精确率曲线不断降低即很大可能模型过拟合了。 2Python变量[10] Python变量由内存地址标识、数据类型、变量值组成。标识对象所存储的内存地址使用内置函数idobj来获取对象的数据类型使用内置函数typeobj来获取。 Python的一切变量都是对象都采用了引用语义的方式存储存储的只是一个变量的值所在的内存空间Python的变量创建、赋值操作可基于C中的指针理解。在Python中需要使用到变量值时变量会根据自身存储的指向值的内存地址从而获取值。 3可迭代对象、迭代器和生成器Python机制[7][8] 可迭代对象Iterable指存储了元素的一个容器对象且容器中的元素可以通过__iter__方法迭代器形式返回或__getitem__方法实例名[index]访问。 迭代器Iterator迭代器可以看作是一个特殊的对象每次调用该对象时会返回自身的下一个元素调入内存。从类构造上来看一个迭代器对象必须是定义了__iter__()方法和next方法的对象。迭代器的优点是节约内存数据循环读入内存而不是一次性同时每次取值上一条数据都会在内存释放、实现惰性计算需要时再根据保存的状态计算读入对应数据缺点是只能向前一个个访问数据、已访问数据无法再次访问、迭代访问一轮后迭代器空置。 生成器Generator本质上还是一种迭代器但其倾向于存在计算过程的迭代器。生成器包含yield关键字同时也可使用next获取数据。对比于列表生成式实例 [Fxfor x in iterable]返回一个关于Fx的函数值列表将[]替换为即可转换为一个生成器。 显然通过实验可以发现      1若列表存储大量数值且不需要一次性全部参与计算那么将其转换为迭代器逐次加入内存可以节省大量的内存空间迭代器的内存占用空间不变      2在Python中int数字变量是变长存储其最小内存占用为24Bytes。通过查阅资料Python基于C语言编成但Python的int是动态的其int是一个类类内包含特殊的数据结构。       3getsize()仅返回对象的内存占用大小仅考虑直接归因于该对象的内存消耗而不考虑其引用的对象的内存消耗。对于容器对象例如字典或列表给定的内存大小仅涵盖容器使用的内存以及用于引用其他对象的指针值。如果需要计算容器的内存占用以及该容器引用所有内容的大小必须自己编程实现遍历这些包含对象并获取他们大小。 4权重初始化Weight Initialization常用方法[11] Xavier与 Kaiming权重参数初始化 图源 Xavier初始化_探索世界的小白的博客-CSDN博客 上述初始化方式尽可能地保证了训练较长时期的输入激活值都没有出现坍缩或饱和现象使得网络中的信息得到了较好的流动。 5数据归一化处理 数据归一化的优点一是对权值的微小变化不太敏感更易于优化二是一定程度上减少了数据内存消耗。 6损失函数 常见的损失函数有交叉熵损失、Hinge损失、平方误差损失等其中针对样本不平衡情况也涌现出了较多的基于损失函数Trick的缓解方法。具体详细的关于损失函数的内容可见本文参考资料[14]。 7梯度下降gradient descent 在深度学习神经网络模型中BP反向传播方法的核心就是对每层的权重参数不断使用梯度下降来进行优化 [13] 。梯度的方向是函数在给定点上升最快的方向那么梯度的反方向就是函数在给定点下降最快的方向。在深度学习中计算图使得反向传播算法实现变得简单。 小批量随机梯度下降minibatch gradient descent是目前常用的梯度下降策略。其在多次训练迭代之后几乎能与使用完整数据集来计算梯度的模型精确率相近并避免了全读入的内存限制问题。同时其缓解了单个观测值处理频繁随机梯度下降随机梯度下降—SGD频繁更新权重参数造成的大量耗时。 8学习率调整策略——WarmUp Warmup是一种学习率预热方法在模型最初几个Epoch以较低学习率训练后又改为预先设置的学习率以及调整策略进行训练。由于刚开始训练时模型的权重是随机初始化的此时若选择一个较大的学习率可能使得模型学偏或不稳定最初的更新方向可能也是毫无意义的。而Warmup可以在训练初期使模型相对趋于稳定后再选择常见策略训练从而更大可能使得模型收敛速度变快、模型效果更佳 [5]。 常见的学习率调整策略有分段常数衰减、指数衰减、余弦衰减、分段衰减、余弦退火、周期三角、warmup以及多种组合策略。本文主要针对warmup其它学习率调整策略组合进行实现。若需要更为详细地了解学习率调整策略可参考本文参考资料[1][2][3][5]。 二、基于Jupyter的Pytorch自定义模型方法实践 一Pytorch自定义数据集读取类父类Dataset[6] Dataset自定义设计主要就是重写__len__()和__getitem__两个成员函数。同时我们可以在__getitem__函数中加入对样本数据的预处理该操作通常可以借助Torchvision.transforms包含的类操作。 值得注意的是 1样本及其对应标签样本数据的良好命名可以使得数据读入更为规范 2将图像样本数据归一化到0-1内可以节省内存 3对于标签数据我们通常遵循类别从0-n整型int顺序标记为规范将耕地标签改为1便于后续作交叉熵计算。 class MyDataset(Dataset):def __init__(self, imgPath, biaoqianPath):self.imgPath imgPathself.biaoqianPath biaoqianPathself.imgName os.listdir(imgPath)# ToTensor会将数据归一化到0-1之间self.preProcess ToTensor()def __len__(self):return len(self.imgName)def __getitem__(self, index):imgP os.path.join(self.imgPath, self.imgName[index])biaoqianP os.path.join(self.biaoqianPath, r{0}_mask.png.format(self.imgName[index].split(.)[0]))# 读入单张图片数据为 H-W-C 即256×256×3img cv2.imread(imgP)biaoqian cv2.imread(biaoqianP)biaoqianGray cv2.cvtColor(biaoqian, cv2.COLOR_BGR2GRAY)# 将耕地标签255更改为1为规范化biaoqianGray biaoqianGray // 255# 样本多波段数据归一化img self.preProcess(img)return img, biaoqianGray# DataLoder配合使用代码# RGB图像及语义分割标签数据绝对路径 trainPath rG:\ChanXueYan\dataset\train_val_test\train LtrainPath rG:\ChanXueYan\dataset\train_val_test\Ltraindata_train DataLoader(MyDataset(trainPath, LtrainPath), batch_size5, shuffleTrue, num_workers0) 利用TensorBoard展示读入结果如下 二神经网络模型自定义初始权重实践 具有适合的初始化权重的神经网络通常能获得较好的模型表现。不同的初始化权重方式在不同的激活函数上有不同的表现例如通常Kaiming初始化在搭配Relu激活函数后取得较好表现。接下来我将展示部分Pytorch自定义初始化权重参数的方法。 需要注意的是如果nn.Sequential容器里嵌套nn.Sequential容器那么需要另开一个判断容器分支从而再次在容器里循环初始化。 # 定义两个简单的卷积Block ConvDemo nn.Sequential(nn.Conv2d(3,2,3,1,1),nn.BatchNorm2d(2),nn.ReLU(),nn.Conv2d(3,2,3,1,1),nn.BatchNorm2d(2),nn.ReLU())# 第一种方法 # for layerpart in ConvDemo: # # isinstance作用为判断变量是否为相同类 # if isinstance(layerpart,nn.Conv2d): # nn.init.kaiming_normal_(layerpart.weight,modefan_out,nonlinearityrelu) # elif isinstance(layerpart,nn.BatchNorm2d): # nn.init.constant_(layerpart.weight,1) # nn.init.constant_(layerpart.bias,0) # 第二种方法 def init_weights(m):if type(m) nn.Conv2d:nn.init.kaiming_normal_(m.weight,modefan_out,nonlinearityrelu)elif type(m) nn.BatchNorm2d:nn.init.constant_(m.weight,1)nn.init.constant_(m.bias,0) ConvDemo.apply(init_weights)# 查看结果 print(ConvDemo.modules) # 打印第一层卷积权重 print(ConvDemo[0].weight) # 打印第一次层批量归一化权重和偏移 print(ConvDemo[1].weight) print(ConvDemo[1].bias) 结果展示 三神经网络模型自定义学习率下降算法实践 学习率的大小很重要。如果学习率太大优化会发散如果太小训练就会需要过长时间或者最终只能得到次优的结果。同时学习率衰减速率同样重要。如果学习率持续过高我们可能最终会在最小值附近弹跳从而无法达到最优解。 对于学习率的动态调整实际上我们可以在每个迭代轮数Epoch或者每个小批量Step之后动态调整学习率从而响应优化。在实现简单的pytorch自定义学习率调整策略时我们主要定义一个学习率调度器单因子调度器、多因子调度器并重写类内__init__()、__call__()和step函数即可。 在pytorch中我们通常使用以下方式获取并管理模型参数 object.state_dict()——获取模型中各类对象的参数 current_lr 优化器实例变量.state_dict()[param_groups][0][lr]——获取当前学习率 接下来我以“warmup余弦调度器”为例实现学习率自定义动态变化。补充余弦调度器是Loshchilov.Hutter.2016提出的一种启发式算法 # 自定义学习率调度策略 # 该方法未定义scheduler.step方法需要在训练过程通过对优化器的学习率参数赋值更新 class WCscheduler:def __init__(self, base_lr):self.base_lr base_lr# 设置最大cosine余弦下降轮次在该轮次之后全以final_lr继续训练self.max_Epoch 40# 学习率变化下限学习率最低值# 这里可自己根据实验需求调整(此处仅作随意展示)self.final_lr 1e-9# 预热Epoch数设置此处可能在5次完全迭代取得较好效果self.warmup_Epoch 5# 预热过程初始学习率(此处仅作随意展示)self.warmup_begin_lr 1e-9# 非预热过程的变化策略迭代总Epochself.cosine_Epochs self.max_Epoch - self.warmup_Epochdef get_warmup_lr(self, epoch):warmup_increase (self.base_lr - self.warmup_begin_lr) * float(epoch) / float( self.warmup_Epoch)return self.warmup_begin_lr warmup_increasedef __call__(self, epoch):if epoch self.warmup_Epoch:return self.get_warmup_lr(epoch)if epoch self.max_Epoch:self.base_lr self.final_lr ( self.base_lr - self.final_lr) * (1 math.cos(math.pi * (epoch - self.warmup_Epoch) / self.cosine_Epochs)) / 2return self.base_lr# 学习率调度器提示作用 scheduler WCscheduler(lr)# 在训练部分加入该部分 # 设置优化器学习率for param_group in optim.param_groups:param_group[lr] scheduler(epoch)结果展示 参考资料 [1]《动手学深度学习》 — 动手学深度学习 2.0.0 documentation [2]​​​​​​​lr scheduler介绍和可视化 - 知乎 [3]learning rate 的schedule 和callbacks 总结 - 知乎 [4]理解语言的 Transformer 模型  |  TensorFlow Core [5]pytorch之warm-up预热学习策略_pytorch warmup_还能坚持的博客-CSDN博客 [6]源码级理解Pytorch中的Dataset和DataLoader_pytorch dataloader shuffle 所有样本_算法美食屋的博客-CSDN博客 [7]第4章 基础知识进阶 第4.1节 Python基础概念之迭代、可迭代对象、迭代器_LaoYuanPython的博客-CSDN博客 [8]【Python】获取变量占用的内存大小_python查看变量内存大小_是小菜欸的博客-CSDN博客 [9]python中int占几个字节_Python中的整型占多少个字节_weixin_39997173的博客-CSDN博客 [10]​​​​​​​Python彻底搞懂变量、对象、赋值、引用、拷贝 - 知乎 [11]​​​​​​​Xavier初始化_探索世界的小白的博客-CSDN博客 [12]pytorch——计算图与动态图机制_然后就去远行吧的博客-CSDN博客 [13]深度学习相关概念梯度下降_深度学习梯度下降_AiCharm的博客-CSDN博客 [14]损失函数总结-应用和trick - 知乎 模型表现快速分析和可视化平台李飞飞老师团队 Weights Biases – Developer tools for ML
http://www.hkea.cn/news/14490526/

相关文章:

  • jq网站模板佳木斯市建设局网站
  • 网站平台建设需求的意见网络公司 营销型网站
  • wordpress 如何备份数据库抖音seo排名系统
  • 怎样做淘宝联盟网站wordpress首页调用文章数
  • 网站公司seowordpress linux 中文字体
  • 安州区建设局网站咸宁公司网站建设
  • 盐城网站关键词优化一条龙网站建设哪家好
  • 优化网站排名茂名厂商二级子域名ip
  • 移动端网站怎么做外链科学
  • 网站登不上去的原因南沙seo培训
  • 做网站的客户资料交换qq群做海报 画册的素材网站
  • 可以发广告的100个网站简述网站开发的基本流程图
  • 沈阳营销型网站制作技术千万别学计算机网络技术
  • 免费建设网站哪个好猎头公司是什么意思
  • win2003 网站服务器统一企业信息管理系统网站
  • 网站开发的套路海淀网站建设价格
  • 网站的js效果代码网站建设申报方案
  • 永久免费自助建站系统网站产品详情页怎么做
  • 智慧景区网站建设盗取wordpress源码
  • 厦门市建设局网站 限价房福建住房和城乡建设部网站
  • 分销网站方案wordpress 页面归类
  • 做网页的工具wordpress优化代码
  • 苏宁网站开发人员工资长沙网站建设制作
  • 七彩建设集团官方网站家装公司装修
  • 天津如何做百度的网站网上推广平台 怎么入手
  • 网站开发价钱免费在线观看韩国电视剧网站推荐
  • 作品集模板网站女教师遭网课入侵视频大全播放
  • 怎样做宣传网站贵州建设厅网站建筑企业公示栏
  • 用网站做淘宝客怎么样伊犁建设网站公司
  • 免费创建个人商城网站东莞网络问政平台