博客主页 🏗️
博主头像

wyのblog

:I know you are here.

Blog:

wyのblog
暂无内容
2024年7月15日
阴  🏗️ 搬砖 🏖️ 29℃
切换一下IP,看不完的文献,看不懂的公式...
最新
无标签
机器视觉与深度学习基础知识补漏Week1
分类: 默认分类
简介:机器视觉与深度学习基础知识补漏Week1线性分类器分类器设计总体流程下图是分类器设计总体流程图像表示二值化图像;(0or1)灰度图像;(0 255 单通道)彩色图像;(三通道RGB)分类模型线性分类器:f(x,w)计算分类得分,选取其中最高的分类得分作为分类输出。其中w其实是作为权重矩阵,w表示对图像中特殊部分进行突出显示,b为偏置项。(模板)线性分类器其实就是寻找分类的决策边界。通过决策边界来判断样本的分类情况。### 损失函数损失值:真实值和预测值的差值。一般数据集的损失函数定义:多累支撑向量机损失:其中存在一个+1操作,是为了防止两类误差分类预测值相近,虽然预测正确,但是分类器仍需优化的情况。引入正则损失(对参数的损失,参数平衡)。其中包含一个超参数用来调整数据损失和正则损失的权重关系。优化算法目标旨在:寻找使得损失函数达到最小时的那一组W参数。直接方法:使得损失函数对W求导得0。梯度下降算法:梯度下降的方向以及步长(lr)。具体流程:计算梯度 >更新梯度梯度计算方法:1.按照导数公式求导,(f(x+n) f(x))/n这一套。2.使用解析法,现有的求导公式。随机梯度下降法:相较于梯度下降法,其是随机使用一个样本进行计算梯度,减少了计算量,在大量的数据下其正向优化效果能掩盖噪声带来的负面影响。小批量梯度下降法:每次随机选取m个样本计算梯度。m=1时就是随机梯度下降法。iteration;batch_size;epoch;数据集划分:这里搞清楚了验证集和训练集的区别:训练集只能用俩评估最终模型的性能;验证集是用来判定不同朝参属下的模型的性能,本质上用于选择超参数;训练集用来训练模型里面的参数;K折交叉验证:数据量小的时候使用,分为shuffled和not..数据预处理(去范围,去量纲):全连接神经网络网络结构激活函数常用的激活函数:损失函数SOFTMAX:将输出分数压缩到0 1内,即一个概率分布。相较于之前的输出分数,这里我们输出的是一个概率。因此对应的损失函数也应该改变。交叉熵损失:对于SOFTMAX预测概率和真实one hot编码的真实值进行损失值计算的方法。这里介绍了三个概念:熵、交叉熵和相对熵;其关系是交叉熵=熵+相对熵。由于在我们的分类任务中,确定分类结果的熵为0,所以我们可以使用交叉熵来代替相对熵来度量两个分布的不相似性。我们再将之前了解的多类支持向量机损失和交叉熵损失进行比较:其计算过程也不同。前者将每一类预测得分 真实值求和;而后者则使用真实的类别预测概率做负对数求损失。举个例子:计算图计算图是一种有向图,它用来表达输入、输出及中间变量的计算关系,图中的每一个节点对应着一种数学运算。计算图可以更好的帮我们表示计算机中表达式运算的过程,尤其是在反向传播中进行求梯度的链式求导的过程。小知识点:计算图的颗粒度。使用计算颗粒度大的门,也就是这个门不仅仅是一个符号,而是一个公式,会大大减小我们的计算量,提高计算效率,但是这种门/公式得需要自己设计。动量法对于SGD,其可能存在山谷问题,导致出现震荡。引入动量法,实际上就是引入了历史梯度信息协同更新梯度。这里引入了动量系数,用以表示历史梯度信息所占的权重(可以理解为摩擦系数)。动量法的另一个优势:通过一个历史梯度能将我们推出鞍点这个范围。另一种方法:自适应梯度法自适应梯度法:本质就是在震荡的方向减小其步长,在平缓的方向增大其步长。而对于如何分辨震荡和平缓,其依据是梯度幅度的平方大小,大的为震荡方向,小的为平缓方向。缺陷就是:随着步数的累计,历史梯度值越来越大,导致整体步长被压制,步长越来越小。为了解决这个缺陷同样引入了一个权值(类似动量),用以控制历史梯度值的影响范围。动量法和自适应梯度法结合:Adam。这里有一个细节:由于在累计梯度和累计平方梯度时,导致一开始的用来更新权值的梯度被缩小(冷启动),模型很难收敛,因此提出了一个修正偏差。其保证了初试的修正动量和修正自适应梯度能保持原有的梯度,在经过一段时间的更新后,缩小当前梯度的影响,放大两者结合的优点(累计梯度和累计平方梯度)。权值初始化首先要避免全0初始化,这样导致输出全为0,并且方向传播时的梯度也一样,最后更新后的权值也全部一样,也就是所有神经元学习到的东西全部一样,等价为1一个神经元,导致无法训练。其次权值随机初始化,保证权值服从N(0,0.01)的高斯分布。但是我们发现在第三个及之后的隐层的输出全为0,也就是前向传播的信息全部丢失了。并且因此在反向传播时局部梯度也为0,反向传播也消失。我们的神经元全部处于饱和阶段,正向传播信息传递过去了,但是在反向传播时局部梯度全部为0(梯度消失)。可以看出我们希望得到一个在正向传播过程和反向传播过程中信息不丢失的初始化方法。Xavier初始化:使得输入与输出分布相同(都为正态分布)通过分析可以知道,我们W的分布要为(0,1/N)时,输入和输出的分布才相同。批归一化解决前向过程中信号消失的问题(输出不至于小到0)。在反向传播中让较小的值回归到0均值1方差左右。下面是归一化的过程最后增加了4.平移缩放,因为0均值1方差不一定是最好的结果,需要根据数据的情况来指定,其中y是对方差的调整,p是对均值的调整都是从数据集中学习而来的。对于单张样本测试时,均值和方差来自于训练中累加的每个批次的均值和方差,最后取平均的结果作为预测时的均值和方差。过拟合模型在训练集上准确率很高,但是在真实场景下识别率很低。最好的解决方案是:增大数据集次优解:正则化:1.调节模型大小2.增加正则项(正则损失),对于大数值权值向量进行惩罚,鼓励更加分散的权重向量,使模型更倾向于用所有输入特征作决策。欠拟合模型训练效果不佳,在训练集上效果就不行,更不提测试集及其泛化能力了。DropoutDropout:让隐层的神经元以一定概率失活(不起作用),需要设置一个比例,将某一层的输出值舍弃(设置为0)。解释Dropout为什么能防止过拟合?1.更新梯度时参与计算的网络参数变少,降低模型容量。2.鼓励权重分散(通正则化)3.模型集成(很像集成学习 投票)细节问题:在dropout之后需要保持训练层和预测层的输出水平一致。超参数调优超参数是人为设计的,在模型设计阶段就需要指定。网格索搜,随机搜索。一般先采用随机搜索确定大致范围再使用网格搜索精细查找。使用标尺空间后,我们在不同量纲下分布比较均衡。
2023年5月25日
置顶
九江行
2023年5月25日
置顶
wy的leetcode刷题记录_Day66
简介:wy的leetcode刷题记录_Day66声明本文章的所有题目信息都来源于leetcode如有侵权请联系我删掉!时间:2023 4 10前言@TOC1019. 链表中的下一个更大节点今天的每日一题是:1019. 链表中的下一个更大节点题目介绍给定一个长度为 n 的链表 head对于列表中的每个节点,查找下一个 更大节点 的值。也就是说,对于每个节点,找到它旁边的第一个节点的值,这个节点的值 严格大于 它的值。返回一个整数数组 answer ,其中 answer[i] 是第 i 个节点( 从1开始 )的下一个更大的节点的值。如果第 i 个节点没有下一个更大的节点,设置 answer[i] = 0 。示例 1:输入:head = [2,1,5] 输出:[5,5,0] 示例 2:输入:head = [2,7,4,3,5] 输出:[7,0,5,5,0]思路一道简单的模拟题,分析题意下来就是,遍历整个节点,对于当前节点我们向后寻找第一个大于该节点的节点值,并将值放入一个vector,如果没有则放入0。代码/** * Definition for singly linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) * ListNode(int x) : val(x), next(nullptr) * ListNode(int x, ListNode *next) : val(x), next(next) * }; */ class Solution { public: vector<int> nextLargerNodes(ListNode* head) { ListNode* curr=head; ListNode*next=head >next; vector<int> ans; while(curr >next) { while(next) { if(next >val>curr >val) { ans.push_back(next >val); break; } else { next=next >next; } } if(next==nullptr) { ans.push_back(0); } curr=curr >next; next=curr >next; } ans.push_back(0); return ans; } };收获简单的模拟题OI WIKIOI WIKI从今天起,开始较为系统的学习算法的一些基础,不再盲目刷题了。
wy的leetcode刷题记录_Day66
简介:wy的leetcode刷题记录_Day66声明本文章的所有题目信息都来源于leetcode如有侵权请联系我删掉!时间:2023 4 10前言@TOC1019. 链表中的下一个更大节点今天的每日一题是:1019. 链表中的下一个更大节点题目介绍给定一个长度为 n 的链表 head对于列表中的每个节点,查找下一个 更大节点 的值。也就是说,对于每个节点,找到它旁边的第一个节点的值,这个节点的值 严格大于 它的值。返回一个整数数组 answer ,其中 answer[i] 是第 i 个节点( 从1开始 )的下一个更大的节点的值。如果第 i 个节点没有下一个更大的节点,设置 answer[i] = 0 。示例 1:输入:head = [2,1,5] 输出:[5,5,0] 示例 2:输入:head = [2,7,4,3,5] 输出:[7,0,5,5,0]思路一道简单的模拟题,分析题意下来就是,遍历整个节点,对于当前节点我们向后寻找第一个大于该节点的节点值,并将值放入一个vector,如果没有则放入0。代码/** * Definition for singly linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) * ListNode(int x) : val(x), next(nullptr) * ListNode(int x, ListNode *next) : val(x), next(next) * }; */ class Solution { public: vector<int> nextLargerNodes(ListNode* head) { ListNode* curr=head; ListNode*next=head >next; vector<int> ans; while(curr >next) { while(next) { if(next >val>curr >val) { ans.push_back(next >val); break; } else { next=next >next; } } if(next==nullptr) { ans.push_back(0); } curr=curr >next; next=curr >next; } ans.push_back(0); return ans; } };收获简单的模拟题OI WIKIOI WIKI从今天起,开始较为系统的学习算法的一些基础,不再盲目刷题了。
That's Us
创作:Anson Seabra
云ID:1372350500
评分:
分类: 音乐
标签:
简介:哈哈这是网易云随机推荐给我的一首歌,当Anson Seabra的歌声传入我的耳朵中时,我知道这就是我想要的,这就是“一听钟情”吧?这首歌能让你想起青春里的遗憾嘛?Almost thought we could've been something,Almost thought we could havetried, butIt didn't happen so I need you to get out my life。差点我就觉得我们会有结果了。即使如此,明天我还是想见你。
wy的leetcode刷题记录_Day64
简介:wy的leetcode刷题记录_Day64声明本文章的所有题目信息都来源于leetcode如有侵权请联系我删掉!时间:2023 3 29前言@TOC1641. 统计字典序元音字符串的数目今天的每日一题是:1641. 统计字典序元音字符串的数目题目介绍给你一个整数 n,请返回长度为 n 、仅由元音 (a, e, i, o, u) 组成且按 字典序排列 的字符串数量。字符串 s 按 字典序排列 需要满足:对于所有有效的 i,s[i] 在字母表中的位置总是与 s[i+1] 相同或在 s[i+1] 之前。示例 1:输入:n = 1 输出:5 解释:仅由元音组成的 5 个字典序字符串为 ["a","e","i","o","u"] 示例 2:输入:n = 2 输出:15 解释:仅由元音组成的 15 个字典序字符串为["aa","ae","ai","ao","au","ee","ei","eo","eu","ii","io","iu","oo","ou","uu"]。注意,"ea" 不是符合题意的字符串,因为 'e' 在字母表中的位置比 'a' 靠后 示例 3: 输入:n = 33 输出:66045思路归纳总结法:列出表格看图:数学分析法:我们想象有五个盒子,共有n个小球。从左往右盒子编号依次为a、e、i、o、u,我们必须从左往右再拿n个小球出来,每当我们拿出一个小球时,将盒子上的编号填入字符串即可。这样子就转换成这n个小球该如何放入这5个盒子并且盒子可以为空的排列组合问题。我们假设有n+5个球,多出的5个球分别放入a、e、i、o、u,这样剩下n个就可以随便放入了。就是在这n个球中插入四个隔板分成五类,四个隔板在n 1个空中随机分布C(4 n 1)。或者你将n个球盒子不为空和空1个一直到空5个的情况加起来也可以。代码class Solution { public: int countVowelStrings(int n) { vector<vector<int>> dp(n+1,vector<int>(5)); // int dp[n][5]; if(n==1) return 5; for(int i=0;i<5;i++) { dp[0][i]=1; } for(int i=0;i<n+1;i++) { dp[i][0]=1; } for(int i=1;i<n+1;i++) { for(int j=1;j<5;j++) { dp[i][j] = dp[i][j 1] + dp[i 1][j]; } } return dp[n][4]; } };class Solution { public: int countVowelStrings(int n) { return (n + 4) * (n + 3) * (n + 2) * (n + 1) / 24; } }; 收获观察题,最后总结出数学规律。
Flying :))
创作:Tom Odell
云ID:1963608731
评分:
分类: 音乐
标签:
无标签
简介:i feel overwhelmed
博客主页 wyのblog I know you are here. 百度统计
鄂ICP备2023003777号-1 本站已运行 324 天 12 小时 50 分 自豪地使用 Typecho 建站,并搭配 MyDiary 主题 Copyright © 2023 ~ 2024. wyのblog All rights reserved.
打赏图
打赏博主
欢迎
搜 索
足 迹
分 类
  • 默认分类
  • Code
  • 日记
  • 音乐
  • 游戏
  • 阅读
  • 计划
  • 图片
  • 旅游
  • 影视