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

网站导航条设计电脑系统优化工具

网站导航条设计,电脑系统优化工具,购物网站模板免费,网站谷歌排名一、概念介绍 权重衰减#xff08;Weight Decay#xff09;是一种常用的正则化技术#xff0c;它通过在损失函数中添加一个惩罚项来限制模型的复杂度#xff0c;从而防止过拟合。 在训练参数化机器学习模型时#xff0c; 权重衰减#xff08;weight decay#xff09;是…一、概念介绍 权重衰减Weight Decay是一种常用的正则化技术它通过在损失函数中添加一个惩罚项来限制模型的复杂度从而防止过拟合。  在训练参数化机器学习模型时 权重衰减weight decay是最广泛使用的正则化的技术之一 它通常也被称为L2正则化。 1.1理解 权重衰减weight_decay本质上是一个L2正则化系数 那什么是参数的正则化从我的理解上就是让参数限定在一定范围目的是为了不让模型对训练集过拟合。 注应对过拟合最好的方法还是扩大有效样本但成本过高 1.2如何控制模型容量 1.将模型变得比较小减少里面参数的数量 2.缩小参数的取值范围 注权重衰退就是通过限制参数的取值来实现 1.3硬性限制 即使得w的每个项的平方都小于θ这个值最强情况下就是θ等于0即所有w都等于0 1.4柔性限制 即损失函数后面加了一个非负项为了使损失函数最小化就得使得后面项足够小——起到限制w的作用相比于硬性限制柔性限制并没有将w的值限制在一个固定范围内。 1.5图解对最优解的影响 上式为不加限制条件的最优解即图中的绿色中心点但该点会使得||w||^2这一项较大其和并不是最优解。 而加上限制的最优点即为图中两曲线的交叉点 1.6更新参数法则 1.7总结 ~权重衰减是通过L2正则项使得模型参数不会过大从而控制复杂度 ~正则项权重是控制模型复杂度的超参数 二、示例演示 2.1模型构造 生成公式如下 # 导入需要的库 import torch from torch import nn from d2l import torch as d2l# 定义训练和测试数据集的大小输入特征的维度和批次大小 n_train, n_test, num_inputs, batch_size 20, 100, 200, 5# 定义真实的权重true_w和偏差true_b并将其初始化为0.01和0.05 true_w, true_b torch.ones((num_inputs, 1)) * 0.01, 0.05# 使用d2l.synthetic_data函数生成训练数据train_data和测试数据test_data # 生成的数据是通过真实的权重和偏差加上一些噪声生成的 train_data d2l.synthetic_data(true_w, true_b, n_train) test_data d2l.synthetic_data(true_w, true_b, n_test)# 使用d2l.load_array函数将训练数据train_data和测试数据test_data # 转换为数据迭代器train_iter和test_iter train_iter d2l.load_array(train_data, batch_size) test_iter d2l.load_array(test_data, batch_size, is_trainFalse) 2.2初始化模型参数 def init_params():w torch.normal(0, 1, size(num_inputs, 1), requires_gradTrue)b torch.zeros(1, requires_gradTrue)return [w, b] # 初始化模型参数w和b # w的形状为(num_inputs, 1)从正态分布中随机生成 # b初始化为0 # 参数需要计算梯度requires_grad参数被设置为True # 返回一个包含w和b的列表 2.3定义L2范数 def l2_penalty(w):return torch.sum(w.pow(2)) / 2 2.4定义训练代码实现 下面的代码将模型拟合训练数据集并在测试数据集上进行评估。 函数的具体实现如下 首先通过init_params()函数初始化模型参数w和b。 定义net函数为线性回归模型loss为平方损失函数。 设置训练的轮数num_epochs和学习率lr同时创建一个可视化工具animator用于可视化训练过程中的损失值。 在每个epoch中遍历训练数据集train_iter对每个小批量数据(X, y)进行如下操作 计算模型的输出net(X)并计算损失函数loss(net(X), y)。 加上L2范数惩罚项lambd * l2_penalty(w)其中l2_penalty(w)为权重w的L2范数。 对损失函数进行反向传播并使用SGD来更新模型参数w和b。 每5个epoch计算训练集和测试集上的损失值并使用animator将损失值可视化。 训练结束后输出模型参数w的L2范数。 # 带有L2正则化的线性回归训练过程 # lambd表示L2正则化的强度# 初始化模型参数w和b w, b init_params()# 定义线性回归模型net和平方损失函数loss net, loss lambda X: d2l.linreg(X, w, b), d2l.squared_loss# 设置训练的轮数num_epochs和学习率lr # 创建一个可视化工具animator用于可视化训练过程中的损失值 num_epochs, lr 100, 0.003 animator d2l.Animator(xlabelepochs, ylabelloss, yscalelog,xlim[5, num_epochs], legend[train, test])# 在每个epoch中遍历训练数据集train_iter对每个小批量数据(X, y)进行如下操作 for epoch in range(num_epochs):for X, y in train_iter:# 计算模型的输出net(X)并计算损失函数loss(net(X), y)# 加上L2范数惩罚项lambd * l2_penalty(w)其中l2_penalty(w)为权重w的L2范数# 对损失函数进行反向传播并使用SGD来更新模型参数w和bl loss(net(X), y) lambd * l2_penalty(w)l.sum().backward()d2l.sgd([w, b], lr, batch_size)# 每5个epoch计算训练集和测试集上的损失值并使用animator将损失值可视化if (epoch 1) % 5 0:animator.add(epoch 1, (d2l.evaluate_loss(net, train_iter, loss),d2l.evaluate_loss(net, test_iter, loss)))# 训练结束后输出模型参数w的L2范数 print(w的L2范数是, torch.norm(w).item()) 2.5训练结果展示 在这段代码中lambd是一个超参数表示L2正则化的强度。在每个小批量数据的损失函数中会加上L2范数惩罚项以控制模型的复杂度和防止过拟合。L2正则化的强度由超参数lambd控制lambd越大模型的复杂度就越小对训练数据的拟合程度就越差但是可以更好地控制过拟合。反之lambd越小模型的复杂度就越大对训练数据的拟合程度就越好但是可能会过拟合。在模型训练过程中我们通常会使用交叉验证等技术来选择最优的超参数lambd。 2.5.1忽略正则化直接训练 其中用lambd  0禁用权重衰减后运行这个代码。 注意虽然训练误差有了减少但测试误差没有减少 这意味着出现了严重的过拟合。 2.5.2使用权重衰减 下面我们使用权重衰减来运行代码。 注意在这里训练误差增大但测试误差减小。 得到预期效果。 三.简洁实现代码 # 导入需要的库 import torch from torch import nn from d2l import torch as d2ldef train_concise(wd):# 定义训练和测试数据集的大小输入特征的维度和批次大小n_train, n_test, num_inputs, batch_size 20, 100, 200, 5# 使用nn.Sequential定义了一个单层全连接神经网络net# 并将其参数使用param.data.normal_()方法初始化为随机值net nn.Sequential(nn.Linear(num_inputs, 1))for param in net.parameters():param.data.normal_()# 使用nn.MSELoss定义平方损失函数loss# 该损失函数的reduction参数设置为none表示不对损失值进行降维loss nn.MSELoss(reductionnone)# 设置训练的轮数num_epochs和学习率lr# 使用torch.optim.SGD定义一个优化器trainer该优化器的参数包括网络的权重和偏差以及权重衰减系数wdnum_epochs, lr 100, 0.003trainer torch.optim.SGD([{params:net[0].weight,weight_decay: wd},{params:net[0].bias}], lrlr)# 创建一个可视化工具animator用于可视化训练过程中的损失值animator d2l.Animator(xlabelepochs, ylabelloss, yscalelog,xlim[5, num_epochs], legend[train, test])# 在每个epoch中遍历训练数据集train_iter对每个小批量数据(X, y)进行如下操作for epoch in range(num_epochs):for X, y in train_iter:# 将优化器trainer的梯度清零# 计算模型的输出net(X)并计算损失函数loss(net(X), y)# 对损失函数进行反向传播并使用优化器trainer来更新模型参数trainer.zero_grad()l loss(net(X), y)l.mean().backward()trainer.step()# 每5个epoch计算训练集和测试集上的损失值并使用animator将损失值可视化。if (epoch 1) % 5 0:animator.add(epoch 1,(d2l.evaluate_loss(net, train_iter, loss),d2l.evaluate_loss(net, test_iter, loss)))print(w的L2范数, net[0].weight.norm().item()) train_concise(0) #lambd设置为0
http://www.w-s-a.com/news/222509/

相关文章:

  • 找公司做网站注意事项麻城建设局网站停办
  • 沧州企业做网站wordpress 消息通知
  • 网站开发外包计入什么科目怎样申请网站空间
  • 西安建设局网站小孩把巴塘网站建设
  • 做网站 客户一直要求改郑州做优惠券网站的公司
  • 专门做特卖的网站是什么东北石油大学秦皇岛吧
  • 网站建设需要云主机吗wordpress 下载数据表插件
  • 集团网站建设哪个好石龙镇仿做网站
  • 网站建设费税率是多少项目备案信息查询
  • 网站开发php有哪些权威发布型舆情回应
  • 凡科建站有哪些弊端百度手机怎么刷排名多少钱
  • 南山网站公司在招聘网站做销售工资高吗
  • 百度联盟怎么加入赚钱合肥seo按天收费
  • 网站建设与用户需求分析加盟店排行榜加盟项目排行榜
  • 柳州市诚信体系建设网站wordpress建手机网站吗
  • 网站策划书是什么水产公司网站源码
  • 温州做网站多少钱网站服务器机房
  • 网站公司设计 网站首页什么网站专门做图片
  • 书店网站怎么做网站点击快速排名
  • 太阳镜商城网站建设公司做网站
  • 如何制作个人作品网站宣传片拍摄合同
  • 关于微网站策划ppt怎么做做插画的网站
  • 做设计网上揽活哪个网站最好中企动力算大厂吗
  • 电子商务网站开发常用工具牡丹江吧
  • 四川成都网站制作公司wordpress 获取某个分类的文章
  • wordpress 编辑器推动门户网站建设不断优化升级
  • 做游戏网站的前景温江区建设局网站
  • 济南做微网站推广做网站seo优化总结
  • 巢湖网站建设电话长沙大型互联网公司
  • wordpress站群主机海南人