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

字体图标网站如何做新闻类网站

字体图标网站,如何做新闻类网站,做网站开发前景如何,网站首页的动态视频怎么做的第三章 深度学习分为如下几个步骤 1#xff1a;数据预处理#xff0c;划分训练集和测试集 2#xff1a;选择模型#xff0c;设定损失函数和优化函数 3#xff1a;用模型取拟合训练数据#xff0c;并在验证计算模型上表现。 接着学习了一些数据读入 模型构建 损失函数的构…第三章 深度学习分为如下几个步骤 1数据预处理划分训练集和测试集 2选择模型设定损失函数和优化函数 3用模型取拟合训练数据并在验证计算模型上表现。 接着学习了一些数据读入 模型构建 损失函数的构建 以及训练 第四章 主要是基础实战。 一些细节 class MLP(nn.Module): 声明带有模型参数的层这里声明了两个全连接层 def init(self, **kwargs): # 调用MLP父类Block的构造函数来进行必要的初始化。这样在构造实例时还可以指定其他函数 super(MLP, self).init(**kwargs) self.hidden nn.Linear(784, 256) self.act nn.ReLU() self.output nn.Linear(256,10) 定义模型的前向计算即如何根据输入x计算返回所需要的模型输出 def forward(self, x): o self.act(self.hidden(x)) return self.output(o) net(X) 会调用MLP继承自Module类的call函数这个函数会调用MLP类定义的forward函数来完成前向计算 一个神经网络的典型训练过程如下 定义包含一些可学习参数(或者叫权重的神经网络 在输入数据集上迭代 通过网络处理输入 计算 loss (输出和正确答案的距离 将梯度反向传播给网络的参数 更新网络的权重一般使用一个简单的规则weight weight - learning_rate * gradient torch.nn.init 作用 All the functions in this module are intended to be used to initialize neural network parameters, so they all run in torch.no_grad() mode and will not be taken into account by autograd. 损失函数的构建 torch.nn.BCELoss(weightNone, size_averageNone, reduceNone, reduction‘mean’) 功能计算二分类任务时的交叉熵Cross Entropy函数。在二分类中label是{0,1}。对于进入交叉熵函数的input为概率分布的形式。一般来说input为sigmoid激活层的输出或者softmax的输出。 weight:每个类别的loss设置权值 size_average:数据为bool为True时返回的loss为平均值为False时返回的各样本的loss之和。 reduce:数据类型为bool为True时loss的返回是标量 torch.nn.CrossEntropyLoss(weightNone, size_averageNone, ignore_index-100, reduceNone, reduction‘mean’) 功能计算交叉熵函数 主要参数 weight:每个类别的loss设置权值。 size_average:数据为bool为True时返回的loss为平均值为False时返回的各样本的loss之和。 ignore_index:忽略某个类的损失函数。 reduce:数据类型为bool为True时loss的返回是标量。 torch.nn.L1Loss(size_averageNone, reduceNone, reduction‘mean’) 功能 计算输出y和真实标签target之间的差值的绝对值。 我们需要知道的是reduction参数决定了计算模式。有三种计算模式可选none逐个元素计算。 sum所有元素求和返回标量。 mean加权平均返回标量。 如果选择none那么返回的结果是和输入元素相同尺寸的。默认计算方式是求平均。 torch.nn.MSELoss(size_averageNone, reduceNone, reduction‘mean’) 功能 计算输出y和真实标签target之差的平方 torch.nn.SmoothL1Loss(size_averageNone, reduceNone, reduction‘mean’, beta1.0) L1的平滑输出其功能是减轻离群点带来的影响 reduction参数决定了计算模式。有三种计算模式可选none逐个元素计算。 sum所有元素求和返回标量。默认计算方式是求平均。 torch.nn.SmoothL1Loss(size_averageNone, reduceNone, reduction‘mean’, beta1.0) L1的平滑输出其功能是减轻离群点带来的影响 reduction参数决定了计算模式。有三种计算模式可选none逐个元素计算。 sum所有元素求和返回标量。默认计算方式是求平均。 torch.nn.PoissonNLLLoss(log_inputTrue, fullFalse, size_averageNone, eps1e-08, reduceNone, reduction‘mean’) 功能 泊松分布的负对数似然损失函数 主要参数 log_input输入是否为对数形式决定计算公式。 full计算所有 loss默认为 False。 eps修正项避免 input 为 0 时log(input) 为 nan 的情况。 torch.nn.KLDivLoss(size_averageNone, reduceNone, reduction‘mean’, log_targetFalse) 功能 计算KL散度也就是计算相对熵。用于连续分布的距离度量并且对离散采用的连续输出空间分布进行回归通常很有用。 reduction计算模式可为 none/sum/mean/batchmean。 none逐个元素计算。 sum所有元素求和返回标量。 mean加权平均返回标量。 batchmeanbatchsize 维度求平均值 torch.nn.MarginRankingLoss(margin0.0, size_averageNone, reduceNone, reduction‘mean’) 功能 计算两个向量之间的相似度用于排序任务。该方法用于计算两组数据之间的差异。 margin边界值(x_{1}) 与(x_{2}) 之间的差异值。 reduction计算模式可为 none/sum/mean torch.nn.MultiLabelMarginLoss(size_averageNone, reduceNone, reduction‘mean’) 功能 对于多标签分类问题计算损失函数。 torch.nn.SoftMarginLoss(size_averageNone, reduceNone, reduction‘mean’)torch.nn.(size_averageNone, reduceNone, reduction‘mean’) 功能 计算二分类的 logistic 损失。 reduction计算模式可为 none/sum/mean。 torch.nn.MultiMarginLoss(p1, margin1.0, weightNone, size_averageNone, reduceNone, reduction‘mean’) 功能 计算多分类的折页损失 主要参数: reduction计算模式可为 none/sum/mean。 p可选 1 或 2。 weight各类别的 loss 设置权值。 margin边界值 torch.nn.TripletMarginLoss(margin1.0, p2.0, eps1e-06, swapFalse, size_averageNone, reduceNone, reduction‘mean’) 功能 计算三元组损失。 三元组: 这是一种数据的存储或者使用格式。实体1关系实体2。在项目中也可以表示为 anchor, positive examples , negative examples 在这个损失函数中我们希望去anchor的距离更接近positive examples而远离negative examples 主要参数: reduction计算模式可为 none/sum/mean。 p可选 1 或 2。 margin边界值 torch.nn.HingeEmbeddingLoss(margin1.0, size_averageNone, reduceNone, reduction‘mean’) 功能 对输出的embedding结果做Hing损失计算 主要参数: reduction计算模式可为 none/sum/mean。 margin边界值 torch.nn.CosineEmbeddingLoss(margin0.0, size_averageNone, reduceNone, reduction‘mean’) 功能 对两个向量做余弦相似度 主要参数: reduction计算模式可为 none/sum/mean。 margin可取值[-1,1] 推荐为[0,0.5] 。 torch.nn.CTCLoss(blank0, reduction‘mean’, zero_infinityFalse) 功能 用于解决时序类数据的分类 计算连续时间序列和目标序列之间的损失。CTCLoss对输入和目标的可能排列的概率进行求和产生一个损失值这个损失值对每个输入节点来说是可分的。输入与目标的对齐方式被假定为 “多对一”这就限制了目标序列的长度使其必须是≤输入长度。 主要参数: reduction计算模式可为 none/sum/mean。 blankblank label。 zero_infinity无穷大的值或梯度值为 训练和评估 model.train() # 训练状态 model.eval() # 验证/测试状态 for data, label in train_loader: 之后将数据放到GPU上用于后续计算此处以.cuda()为例 data, label data.cuda(), label.cuda() 开始用当前批次数据做训练时应当先将优化器的梯度置零 optimizer.zero_grad() 之后将data送入模型中训练 output model(data) 根据预先定义的criterion计算损失函数 loss criterion(output, label) 将loss反向传播回网络 loss.backward() 使用优化器更新模型参数 optimizer.step() 这样一个训练过程就完成了后续还可以计算模型准确率等指标这部分会在下一节的图像分类实战中加以介绍。 验证/测试的流程基本与训练过程一致不同点在于 需要预先设置torch.no_grad以及将model调至eval模式 不需要将优化器的梯度置零 不需要将loss反向回传到网络 不需要更新optimizer 反向传播有什么作用 在模型训练过程中反向传播Backpropagation是一种极为重要的算法它主要用于计算损失函数相对于模型参数的梯度进而指导参数的更新最终让模型学习到数据中的模式和规律。下面详细介绍反向传播的作用 计算梯度 链式法则的应用在深度学习模型中损失函数通常是一个复合函数涉及众多的参数和中间变量。反向传播算法利用链式法则从损失函数开始沿着网络的反向路径逐层计算损失函数相对于每个参数的梯度。 具体示例以一个简单的多层感知机MLP为例假设输入层有 两个输入经过隐藏层和激活函数后得到输出 损失函数为 是真实标签。反向传播会从损失函数 开始依次计算 对输出层权重、隐藏层权重等参数的偏导数即梯度。 指导参数更新 梯度下降的基础梯度代表了函数在某一点上升最快的方向而我们的目标是最小化损失函数因此需要朝着梯度的反方向更新模型参数。反向传播计算得到的梯度为梯度下降算法提供了必要的信息。 参数更新公式在随机梯度下降SGD算法中参数更新公式为 其中 是模型参数 是学习率 是通过反向传播计算得到的梯度。 模型学习与优化 自动调整参数通过不断地进行前向传播计算损失再通过反向传播计算梯度并更新参数模型能够自动调整自身的权重和偏置使得损失函数逐渐减小从而提高模型的预测能力。 提高泛化能力反向传播算法帮助模型在训练数据上学习到有效的特征表示同时通过适当的正则化方法如 L1、L2 正则化可以避免模型过拟合提高模型在未知数据上的泛化能力。 支持复杂网络结构 深度网络的训练在深度神经网络中网络结构通常非常复杂包含多个隐藏层和大量的参数。反向传播算法能够有效地处理这种复杂的网络结构通过逐层计算梯度使得深度模型的训练成为可能。 不同类型的层反向传播算法可以应用于各种类型的神经网络层如全连接层、卷积层、循环层等为不同类型的深度学习模型提供了统一的训练方法。 综上所述反向传播在模型训练中起着核心作用它使得深度学习模型能够高效地学习数据中的模式不断优化自身的性能从而在各种任务中取得良好的效果。 深度学习的目标是通过不断改变网络参数使得参数能够对输入做各种非线性变换拟合输出本质上就是一个函数去寻找最优解只不过这个最优解是一个矩阵而如何快速求得这个最优解是深度学习研究的一个重点以经典的resnet-50为例它大约有2000万个系数需要进行计算那么我们如何计算出这么多系数有以下两种方法 第一种是直接暴力穷举一遍参数这种方法实施可能性基本为0堪比愚公移山plus的难度。 为了使求解参数过程更快人们提出了第二种办法即BP优化器逼近求解。 因此优化器是根据网络反向传播的梯度信息来更新网络的参数以起到降低loss函数计算值使得模型输出更加接近真实标签。 在训练深度学习模型时每次迭代计算梯度之前通常需要将梯度置为 0主要是基于 PyTorch、TensorFlow 等深度学习框架中梯度计算和更新的机制下面从多个方面为你详细解释原因。 梯度累加机制 框架的梯度计算方式在大多数深度学习框架里梯度并不是每次计算后就自动清零而是会进行累加。这是因为框架考虑到可能存在需要多次前向传播和反向传播来累积梯度再进行一次参数更新的情况如使用大批次数据但内存有限时。 避免梯度错误累加如果在每次迭代开始时不将梯度置为 0那么新计算得到的梯度会和上一次迭代的梯度累加在一起。这样会导致梯度值不断增大使得参数更新的步长失去控制模型无法按照预期收敛甚至可能导致梯度爆炸。 独立计算每次迭代的梯度 保证每次迭代的独立性模型训练是通过多次迭代不断更新参数以最小化损失函数的过程。每次迭代都应该基于当前的参数状态和当前批次的数据独立计算梯度这样才能准确反映当前批次数据对损失函数的影响进而正确更新参数。 示例说明以随机梯度下降SGD为例每次迭代使用一个小批次的数据计算梯度并更新参数。如果不将梯度置为 0那么下一次迭代计算的梯度就会受到上一次批次数据的干扰无法准确反映当前批次数据的信息从而影响模型的学习效果。
http://www.dnsts.com.cn/news/52546.html

相关文章:

  • 企业网站带商城源码大连建设
  • 企业网站文案外包网站建设用cms
  • 永州网站制作建设较便宜的网站建设
  • 网站开发需要用到哪些软件有哪些icp备案查询
  • 先网站开发后软件开发人气最旺的微信公众号
  • 做女团学什么舞蹈视频网站网站流量高有什么用
  • 北京网络公司的网站云霄城乡建设局网站
  • 如何在别人的网站模板上加兼容网站建设市场推广招聘
  • 加强网站信息建设泰安明航网络科技有限公司
  • 做设计有哪些好用的素材网站国内装饰行业网站制作
  • 做论坛网站的cms如何在拼多多开网店
  • 做宠物服务的相关网站企业微网站怎么建设
  • 长沙公司做网站网站内搜索关键字
  • 婚纱网站设计首页建设小程序怎么挂失
  • 网站模板文件在哪里下载网页链接调用服务需要开启还是关闭
  • 广州制作网站服装公司简介模板
  • 广州比较好的网站建设企业WordPress装不上jetpack
  • 武清做网站品牌推广计划
  • 福建外贸网站建设国外手机html5网站
  • 吉林整站优化免费照片的网站模板免费下载
  • 网站排行榜前十名品牌运营
  • WordPress输入密码可见seo外链怎么做能看到效果
  • 域名查询网站烟台建设集团招聘信息网站
  • 莞城网站推广wordpress模板 免费下载
  • 小学做试卷的网站wordpress 页面标题
  • o2o与网站建设中英企业网站源码
  • 深圳高端网站设计如何微信小程序注册
  • 网页设计师的主要职责网站页面的优化
  • 宁波网站设计服务收费价格福州网站如何制作
  • 新浪博客怎么做网站中国万网域名注册价格