- 博客(23)
- 收藏
- 关注
原创 关于树的算法题(C++)
前段时间总结了一下关于树的算法,上传到博客,以后方便查看。目录二叉树的下一个节点二叉树的镜像对称二叉树树的子结构二叉树的路径打印二叉树重建二叉树二叉搜索树第K大的节点二叉搜索树变成双向链表二叉搜索树的后序遍历序列化二叉树平衡二叉树二叉树的下一个节点/*二叉树的下一个节点给定一颗二叉树和其中一个节点,找到中序遍历的下一个节点,树中有指...
2018-09-15 19:13:29
789
原创 caffe im2col
im2col最近在研究caffe的源码,im2col是caffe非常重要的部分。总结来说,就是把卷积运算变成矩阵运算,具体怎么做到的,下面通过源码还有一个例子来详细说明一下。源码首先,先看一下caffe的作者贾大神的ppt,是从知乎上找到的。C:图像的通道,K:卷积核的大小,H:图像的高,W:图像的宽这是比较形象的转换,但个人觉得有个错误,就是Feature Matrix的...
2018-08-06 10:40:32
796
原创 算法题--字符串排列组合、n皇后、字符出现次数(C++)
目录 题目:输入一个字符串,按字典序打印出该字符串中字符的所有排列。题目:输入一个字符串,求字符的所有组合。题目:输入一个含有8个数字的数组,把这8个数字放在正方体的8个顶点上,使得正方体上相对的面上的4个顶点的和都相等。题目:N皇后问题。题目:在一个字符串中找到第一个只出现一次的字符,并返回它的位置。题目:定义一个函数,输入两个字符串,从第一个字符串中删除在第二个字符...
2018-07-31 10:55:51
1763
原创 ResNet----论文笔记
这篇论文,一个主要的目的就是把网络变深,变得更深。因此有了残差连接的诞生。从两个方面记录笔记:为什么会用残差连接,什么是残差学习。为什么会用残差连接作者提出一个网络训练过程中出现的问题,叫做“degradation”。 训练过程中,梯度消失/爆炸问题已经解决了,通过精心的初始化以及加上batch normalization层,可以用SGD优化算法训练。但是随着层数的增加,准确率会达到饱和...
2018-07-13 10:37:57
369
原创 inception-v1,v2,v3,v4----论文笔记
最近通读了inception的四篇论文,在此做一下笔记。先给出这四篇论文的地址:Going deeper with convolutions:https://arxiv.org/pdf/1409.4842.pdfBatch Normalization: https://arxiv.org/pdf/1502.03167.pdfRethinking the Inception Architecture...
2018-07-09 10:07:10
35587
7
转载 [转]通俗理解图像中的卷积
引子因研究兴趣不在图像处理,所以对图像中的『卷积』操作未做深入思考,直到某天,灵光一闪,我突然意识到图像『卷积』应该可以和『信号处理』联系起来更进一步图像卷积的本质,是提取图像不同『频段』的特征然而放眼望去,市面上大谈特谈『卷积』的文章,各种雷同,互相『借鉴』,都是在讲解卷积的不同方式、卷积的参数共享、卷积的具体操作、卷积在图像上的效果,竟鲜有一篇像样的文章,真正触及『卷积』的本质、探索『卷积』和...
2018-07-03 09:50:42
1126
原创 SVM中的核技巧
首先,指出核技巧并不是SVM专属的,它是一个独立的算法,是一种使用原属性集计算变换空间中的相似度的方法。只是它与SVM八字很合。为什么使用核技巧SVM构建的是一个线性的决策边界,从而把数据集分到各自的类中,如果数据集是一个非线性的,直接使用SVM,得不到一个理想的结果,那么使用线性分类器求解非线性分类问题,需要特殊的处理:首先,使用一个变换将原空间的数据映射到新空间中然后,在新空间中使用线性分类器...
2018-07-01 12:01:15
3670
原创 论文阅读笔记--VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION
这篇论文主要工作就是探索网络结构,对大规模图像识别任务,网络深度对于最终模型准确率的影响,带有小的卷积核(3*3)的网络,深度的增加会提高准确率,直到网络深度到达16-19层。根据这个论文的摘要,我想到两个关键点:为什么卷积核是3*3为什么到16-19层精度不再提高卷积核大小在这篇论文中,我最感兴趣的点在于,卷积核大小的设置。两个3*3的卷积层叠加,中间不加池化层,那么它的有效感受野(effect...
2018-06-25 09:58:47
453
原创 论文阅读笔记--LightGBM: A Highly Efficient Gradient Boosting Decision Tree
以前学习集成学习时候,都是从网上博客等等一些地方学习的,最近重新复习学习,所以拿出论文来读,这个是这篇论文LightGBM: A Highly Efficient Gradient Boosting Decision Tree的自己的笔记。 在我理解中,这篇论文,是对GBDT算法的改进,是对GBDT算法的增速。主要的改进点就在对训练数据的处理上,其实对算法本质没有改进。 ...
2018-06-24 15:29:10
1004
原创 决策树以及手撸代码
什么是决策树算法 决策树是基本的分类回归算法,呈树状结构,在分类任务中,是基于特征对实例进行分类的过程。可以认为是,在给定特征条件下类的条件概率。决策树算法种类ID3:基于信息增益选择特征的算法C4.5:基于信息增益率选择特征的算法CART:基于gini系数选择特征的算法代码#DTimport numpy as npfrom math import logimport oper...
2018-06-21 19:02:06
796
原创 朴素贝叶斯理解以及手撸代码
对于算法的理解,依然用问题解答的模型来进行。为什么叫朴素贝叶斯 朴素贝叶斯的英文名字是Naive Bayes,Naive这个词常规翻译应该是天真、幼稚。按照这层意思应该翻译成天真的贝叶斯,不好听,所有大牛把它翻译成朴素贝叶斯,有了更好的意境,在我个人理解,用天真、幼稚表达更能说明这个算法的本质。 朴素贝叶斯是基于贝叶斯定理和特征条件独立性假设的分类方法。而这个朴素(天真)的点就...
2018-06-10 10:59:13
662
原创 逻辑回归手撸代码
本篇博客主要是逻辑回归的手撸代码,但是还有我的简单理解,用QW的形式描述。并不是逻辑回归的介绍,如有错误还望指出。逻辑回归与线性回归关系逻辑回归与线性回归同属于广义线性模型。逻辑回归就是用线性回归模型的预测值去拟合真实标记的对数几率。相当于在线性回归模型上加了一层非线性映射。逻辑回归和线性回归就是得到一条直线。线性回归的直线是尽可能去拟合输入向量x的分布,使得训练集中所有样本点到直线的距离最短;而...
2018-06-08 13:17:55
754
原创 机器学习模型越简单越好
首先介绍一下奥卡姆剃刀原理,他是这么说的,Entities should not be multiplied unnecessarily。翻译成高大上的中文意思是:如无必要,勿增实体(瞬间感觉中文高大上,有么有)。在我理解中,用都听的懂的话,做成一件事有很多方式,最简单的方式就是最好的。这个原理应用到机器学习中,就是,在可以很好地解释训练数据的模型中,越简单的模型才是最好的。这样说起来...
2018-05-24 15:18:19
1998
原创 算法题C++(五)
本博客内容:判断一棵二叉树是否是平衡二叉树判断一棵树是否是搜索二叉树判断一棵树是否是完全二叉树已知一棵完全二叉树,求其节点的个数判断一棵二叉树是否是平衡二叉树bool isBalance1(TreeNode* root) { if (root == NULL) { return true; } return abs(getHeight1(root->left) - getHeigh...
2018-05-08 09:46:28
233
原创 算法题C++(四)
本博客目录二叉树的先序、中序、后序遍历,递归和非递归 在二叉树中找到中序遍历的下一个节点 二叉树的序列化和反序列化二叉树的先序、中序、后序遍历,递归和非递归递归版本//树的结构struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), ...
2018-04-27 09:23:27
505
原创 算法题C++(三)
本博客目录将单向链表按某值划分成左边小、中间相等、右边大的形式复制含有随机指针节点的链表两个单链表相交的一系列问题将单向链表按某值划分成左边小、中间相等、右边大的形式给定一个单向链表的头节点head,节点的值类型是整型,再给定一个整数p。实现一个调整链表的函数,将链表调整为左部分都是值小于 p的节点,中间部分都是值等于p的节点,右部分都是值大于 p的节点。空间复杂度为O(N)的算法//建立辅助数组...
2018-04-06 10:22:42
560
原创 C++中vector,stack,queue,deque,priority_queue的基本操作
主要是记录上述的基本操作,以防忘记,可以随时查阅vector基本操作vector<Type> M 定义一个vector的变量M.push_back(a) 尾部插入数字M.insert(vec.begin() + i, a) 插入元素: 在第i+1个元素前面插入aM.erase(vec.begin() + 2) 删除元素 删除第三个元素M.erase(vec.begin() + i, v...
2018-04-06 09:53:36
455
原创 算法题C++(二)
本博客目录转圈打印矩阵旋转正方形矩阵“之”字形打印矩阵反转单向链表打印有序链表的公共部分判断一个链表是否为回文结构转圈打印矩阵给定整型矩阵,按照顺时针转圈打印矩阵class printCircleMatrix{public: printCircleMatrix(); ~printCircleMatrix(); /* 要宏观调控 先打印最外面一圈,之后左上角+1,右下角-1 继续打印...
2018-03-28 14:57:19
373
原创 算法题C++(一)
最近在刷算法题,发表出来与大家分享,有错误还望指出,本博客目录实现返回最小元素功能的栈结构用队列实现栈结构用栈实现队列结构实现一个特殊的栈在实现栈功能的基础上,在返回实现栈中最小元素的操作要求:pop,push,getMin操作时间复杂度为O(1)可以使用现成的栈结构用两个栈来实现,栈1正常存储,来一个数压栈一个。栈2实现最小元素,当新来的数比栈顶元素小时,压入新来的,大于栈顶元素时,重复压入栈顶...
2018-03-22 09:50:17
606
原创 C++内存管理
内存分配方式在C++中,内存有5种方式:栈:执行函数时,函数内部局部变量的存储单元在栈中创建,函数结束时,销毁。先进后出的存储方式。堆:动态分布的区域,由new分配内存块。记得一个new一定对应一个delete。否则会造成内存泄漏。自由存储区:是由malloc分配的内存块。一个malloc要对应一个free。全局/静态存储区:全局变量和静态变量的居住点。常量存储区:存储不允许修改的常量。堆和栈的区...
2018-03-21 15:42:02
186
原创 C++编译过程(笔记)
C++编译过程C语言的编译链接过程就是把源代码转换成在硬件上运行的程序。编译:把文本形式源代码翻译成机器语言形成的目标文件的过程链接: 把目标文件、操作系统的启动代码和库文件组织起来形成可执行程序的过程。1.编译分为两个阶段:编译和汇编1.1 编译进行词法和语法分析,将高级语言指令转换成功能等效的汇编代码,包含两个阶段:编译预处理,编译、优化阶段。编译预处理对其中的伪指令和特殊符号做处理宏定义指令...
2018-03-18 15:26:51
1148
原创 排序算法总结(C++)(第一部分)
排序算法总结(C++)(第一部分)在这篇文章中,记录了自己学习的经典排序算法,代码语言用的C++。现阶段,排序算法已经非常成熟,有各种封装的库函数。但是还是要学习并自己写出代码,一方面理解排序算法可以帮助我们锻炼思维能力,另一方面自己给出代码可以增加我们的码农能力。而在这里记录总结下来,一方面和大家分享探讨,另一方面有不对的地方,希望大家给我指导改正。此外,也能锻炼自己的学习总结能力。本博...
2018-03-17 10:09:36
274
原创 对数器
对数器的作用 对数器可以说是验证算法是否正确的一种方式。尤其是在笔试的时候,用贪心算法写出的程序,暂时无法用数学公式严格推导证明,只能通过大量的数据集验证算法的正确性。而大量的数据集当中要包括各种情况,各个方面都要考虑到,对我们自己来说,有时会考虑不周,而且又是在时间紧迫的情况下。所以对数器就派上了用场。对数器的概念 对数的基本概念如下有一个你想测试的算法a实现一个绝对正确但复杂度高的算...
2018-03-10 08:46:07
6603
7
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人