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

常德交通网站网站开发主菜单和子菜单

常德交通网站,网站开发主菜单和子菜单,中国住房和城乡建设网网站,自动app优化下载文章目录 前言问题引出open-set问题抛出 解决方法softmax函数、softmax-loss函数解决代码#xff08;center_loss.py#xff09;原理程序解释 如何梯度更新首先了解一下基本的梯度下降算法然后 前言 学习一下#xff1a; 中心损失函数#xff0c;用于用于深度人脸识别的特… 文章目录 前言问题引出open-set问题抛出 解决方法softmax函数、softmax-loss函数解决代码center_loss.py原理程序解释 如何梯度更新首先了解一下基本的梯度下降算法然后 前言 学习一下 中心损失函数用于用于深度人脸识别的特征判别方法 论文https://ydwen.github.io/papers/WenECCV16.pdf github代码https://github.com/KaiyangZhou/pytorch-center-loss 参考史上最全MNIST系列三——Centerloss在MNIST上的Pytorch实现可视化 问题引出 open-set问题 open-set 问题是一种模式识别中的问题它指的是当训练集和测试集的类别不完全相同的情况。例如如果训练集只包含 0 到 9 的数字而测试集包含了 A 到 Z 的字母那么就是一个 open-set 问题。这种情况下分类器不仅要正确识别已知的类别还要能够拒绝未知的类别即将它们标记为 unknown 或 outlier。后来我想这就是一个聚类问题 open-set 问题与 closed-set 问题相对应closed-set 问题是指训练集和测试集的类别完全相同的情况。例如如果训练集和测试集都只包含 0 到 9 的数字那么就是一个 closed-set 问题。这种情况下分类器只需要正确识别已知的类别即可。 抛出 当我们要预测的人脸不在训练集中出现过时我们需要让它不识别出而不要因为与训练过的人脸相像而误判。 对于常见的图像分类问题我们常常用softmax loss来求损失。以MNIST数据集为例如果你的损失采用softmax loss那么最后各个类别学出来的特征分布大概如下图在倒数第二层全连接层输出了一个2维的特征向量 左图为训练集右图为测试集发现结果分类还算不错但是每一类的界限太过模糊若从中再加一列则有可能出现误判。 解决方法 softmax函数、softmax-loss函数 已知softmax的函数为 在深度学习的分类问题上意为对应类的概率符合每个类的概率相加和为1且0每个类的概率1。输出层后的结果 其中 zi​ 是第 i 个输出节点的值K是输出节点的个数即分类的类别数。softmax函数的作用是将输出节点的值归一化为范围在 [0, 1] 且和为 1 的概率值表示属于每个类别的可能性。 softmax的损失函数具体详见一文详解Softmax函数 在softmax的函数的基础上我们要求正确对应类的概率最大 即损失函数为(越小越好) 其中z wTxbm是小批量的样本的个数n是类别个数w是全连接层的权重b为偏置项一般来说w,b是要学习出来的xi是第i个深层特征属于第yi类 解决 在分类的基础上我们还要求每个类往自己的中心的特征靠拢使类内间距减少这样才能更加显出差别。 于是论文作者提出如下新的损失函数 其中 xi​ 是第 i 个样本的特征向量cyi​​ 是第 yi​ 个类别的中心向量m 是样本的个数。 小的注意点这里用的是样本数也就是说是在小批量分类任务完成后再进行的聚类任务 我们不难发现作者这里用的是欧式距离的平方即在多维空间上的两点之间真实距离的平方。 实际上我们很容易发现这实际上是一个聚类问题常见的聚类问题上用的是误差平方和SSE损失函数 论文作者仅从此推出的欧式距离的平方仅从形式上十分相像当然可以作为此聚类问题的解决。 在二维上可以简单看成是直角三角形斜边的平方两直角边平方和 为何要加以平方欧式距离的平方相比欧式距离有一些优点例如 1、计算更快省去了开方的运算。 2、更加敏感能够放大距离的差异使得离群点更容易被发现。 3、更加方便能够与其他平方项相结合如方差、协方差等。 最后作者沿用softmax损失函数与中心损失函数相加的方法在损失函数上很常见 这里的1/2很容易想到是作为梯度下降时与后面的平方用来抵消的项这里λ 可以看作调节两者损失函数的比例 来作为总体的损失函数作为此问题的解决。 代码center_loss.py 原理 首先确定三个事实 1、在之前的学习中通过实践得知最小二乘法那块在拟合的最后结果上在利用SSE损失函数与MSE损失函数作为损失值参与到程序中时拟合出的结果并无差别只有在结果出来后作为评判模型的好坏时才有数值上的差别。两者区别在于是否求平均。 2、1/2的乘或不乘只对运算的过程的简便程度有影响与结果无影响。 3、图像是二维的。 于是我们将作者的的中心损失函数稍加变形。就得到了如下形式事实上github上给出的代码就是这么写的 程序解释 参考Center loss-pytorch代码详解 这里只做补充 import torch import torch.nn as nnclass CenterLoss(nn.Module):Center loss.# 参考Reference:Wen et al. A Discriminative Feature Learning Approach for Deep Face Recognition. ECCV 2016.# 参数Args:num_classes (int): number of classes. # 类别数feat_dim (int): feature dimension. # 特征维度# 初始化 默认参数类别数为10 特征维度为2 使用GPUdef __init__(self, num_classes10, feat_dim2, use_gpuTrue):super(CenterLoss, self).__init__() # 继承父类的所有属性self.num_classes num_classes self.feat_dim feat_dimself.use_gpu use_gpuif self.use_gpu: # 如果使用GPU#nn.Parameter()将一个不可训练的tensor转换成可以训练的类型parameter并将这个parameter绑定到一个module里面,参与到模型的训练和优化中。#nn.Parameter的对象的requires_grad属性的默认值是True即是可被训练的这与torth.Tensor对象的默认值相反。self.centers nn.Parameter(torch.randn(self.num_classes, self.feat_dim).cuda()) # 初始化中心矩阵 .cuda()表示将数据放到GPU上else:self.centers nn.Parameter(torch.randn(self.num_classes, self.feat_dim))def forward(self, x, labels): # 前向传播Args:x: feature matrix with shape (batch_size, feat_dim). # 特征矩阵labels: ground truth labels with shape (batch_size). # 真实标签batch_size x.size(0) #batch_size x的形式为tensor张量# .pow对x中的每一个元素求平方 dim1表示按行求和 keepdimTrue表示保持原来的维度 expand是扩展维度distmat torch.pow(x, 2).sum(dim1, keepdimTrue).expand(batch_size, self.num_classes) \torch.pow(self.centers, 2).sum(dim1, keepdimTrue).expand(self.num_classes, batch_size).t() #.t()表示转置 均转成batch_size x num_classes的形式# .addmm_()表示进行1*distmat (-2)*xself.centers.t()的运算 表示矩阵乘法distmat.addmm_(1, -2, x, self.centers.t())classes torch.arange(self.num_classes).long()# 生成一个从0到num_classes-1的整数序列 long表示数据类型if self.use_gpu: classes classes.cuda() #这里 .unsqueeze(0) 例[0,4,2] - [[0,4,2]] .unsqueeze(1) 例[0,4,2] - [[0],[4],[2]] labels labels.unsqueeze(1).expand(batch_size, self.num_classes)# .unsqueeze(1)表示在第1维增加一个维度 .expand()表示扩展维度mask labels.eq(classes.expand(batch_size, self.num_classes)) #eq是比较两个tensor是否相等相等返回1不相等返回0# *表示对应元素相乘dist distmat * mask.float() # mask.float()将mask转换为float类型loss dist.clamp(min1e-12, max1e12).sum() / batch_size # clamp表示将dist中的元素限制在1e-12和1e12之间return loss如何梯度更新 首先了解一下基本的梯度下降算法 【点云、图像】学习中 常见的数学知识及其中的关系与python实战 里的小标题基于迭代的梯度下降算法了解到超参数人为设定的参数 学习率w,b等。此算法为拟合出一条线。 伪代码 1、未达到设定迭代次数 2、迭代次数epoch1 3、计算损失值 4、计算梯度 5、更新w、b 6、达到迭代次数结束 然后 看下这里的更新方法 其中卷积层中初始化的参数 θc超参数 λ、α 和学习率 μ 迭代次数 t 。λ、α、 μ均可调 伪代码 1、当未收敛时 2、迭代次数t1 3、计算损失函数 LLsLc 4、计算反向传播误差即梯度 5、更新w 6、更新cj 7、更新θc 8、结束 其中 其中如果满足条件则 δ条件 1如果不满足则 δ条件 0。 首先第一个公式不用多说为中心损失函数对特征xi求偏导即求梯度。 其次第二个公式加入了判断当条件满足时即yij,即就是在同一类时Δcjcj-xi 的小批量的所有和/m1。相当于累加了误差求平均以此来作为梯度。 当条件不满足时即Δcj 0此时这个分母的1的作用就体现出来了分母不能为0嘛。 补充 第5步后面一个等号成立是因为Lc中没有W项所以Lc对W的求导为0 第7步也是一样求梯度只是写成了求导的链式法则。
http://www.w-s-a.com/news/124407/

相关文章:

  • 郑州移动端网站建设如何在网上推广自己的公司
  • 企业建站源码系统破解网站后台
  • 石家庄网站开发报价企业注册资本代表什么
  • 招商平台公司宁波seo教程推广平台
  • 哪些网站可以做房产推广垂直门户网站都有什么
  • 不得不知道的网站金石项目管理软件
  • 怎么恢复网站数据库网站开发作业代做
  • 哪里建设网站最好用中国第五冶金建设公司医院网站
  • 雄安网建 网站建设订餐网站建设
  • 广州视频网站建站公司网站 体系
  • 青浦门户网站网站推广烟台公司电话
  • 湖北荆门建设银行网站wordpress购物模板下载
  • 学ui+wordpress模板北京推广优化
  • 建分类网站得花多少钱深圳设计网站开发
  • 网站集群建设和网站集约化百度商桥怎么绑定网站
  • 青岛模板网站建设价格网络品牌网站建设
  • 网站建设的几大要素网站的做网站的公司
  • 怎么登陆自己的公司网站垂直电商网站建设
  • 温州微网站制作哪里有许昌网站建设哪家最好
  • 中国中小企业网站官网网页制作工具按其制作方式分 可以分为
  • 做资源下载网站违法吗河南企业做网站
  • 网站开发总体功能设计网站建设 北京昌平
  • 辽宁省高等级公路建设局网站书画院网站建设方案
  • 本地生活网站 源码重庆本地网站有哪些
  • 企业网站域名服务器国外html响应式网站
  • 东莞网站建设策划企业网站推广策划方法
  • 网站的图片怎么制作WordPress交互式网站
  • pc网站增加手机站什么专业学网页设计制作
  • 婚庆公司网站模板wordpress用什么框架
  • 高校网站建设的时效性长沙市网站建设