自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

转载 卷积神经网络中十大拍案叫绝的操作

CNN从2012年的AlexNet发展至今,科学家们发明出各种各样的CNN模型,一个比一个深,一个比一个准确,一个比一个轻量。我下面会对近几年一些具有变革性的工作进行简单盘点,从这些充满革新性的工作中探讨日后的CNN变革方向。一、卷积只能在同一组进行吗?-- Group convolutionGroup convolution 分组卷积,最早在AlexNet中出现,由于当时的硬件资源有限,训练AlexNet时卷积操作不能全部放在同一个GPU处理,因此作者把feature maps分给多个GPU分别进行处

2020-06-29 23:15:05 262

原创 LeetCode之缺失的第一个正数

题目链接:https://leetcode-cn.com/problems/first-missing-positive/解题步骤1:不考虑空间复杂度的话,使用哈希表可以轻松解决问题题目要求只能使用常数级别的额外空间,我们参数才原有数组上模拟哈希表找出没有出现的最小正整数,那么答案只能在[1…n+1],n为数组的大小因为小于等于0的元素不需要考虑,将他们的值设置为n+1接下来,我们需要把下标为nums[ i ] - 1且下标在[0,n-1]的范围的元素值都取反因为是在原数组上操作的,num

2020-06-27 23:35:47 168

转载 Python中的*和**运算符

在 Python 中,* 和 ** 具有语法多义性,具体来说是有四类用法。1. 算数运算* 代表乘法** 代表乘方>>> 2 * 510>>> 2 ** 5322. 函数形参*args 和 **kwargs 主要用于函数定义。你可以将不定数量的参数传递给一个函数。不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下使用这两个关键字。其实并不是必须写成 *args 和 **kwargs。 *(星号) 才是必须的. 你也可

2020-06-24 22:45:31 2174

原创 Python中的序列封包与序列解包

序列封包与序列解包所谓序列,指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值所在位置的编号(称为索引)访问它们。python中的序列包括:列表、元组、字符串。序列封包:把多个值赋给一个变量时,Python会自动的把多个值封装成元组。序列解包:把一个序列(列表、元组、字符串等)直接赋给多个变量,此时会把序列中的各个元素依次赋值给每个变量,但是元素的个数需要和变量个数相同。(可以使用*运算符表示不定数量)序列封包# 将多个值赋值给一个变量>>> a =

2020-06-24 22:12:19 400

转载 目标检测中的数据增强、backbone、head、neck、损失函数

一、数据增强方式random eraseCutOutMixUpCutMix色彩、对比度增强旋转、裁剪解决数据不均衡:Focal losshard negative example miningOHEMS-OHEMGHM(较大关注easy和正常hard样本,较少关注outliners)PISA二、常用backboneVGGResNet(ResNet18,50,100)ResNeXtDenseNetSqueezeNetDarknet(Darknet19,53

2020-06-23 21:39:29 1988

转载 选择排序的稳定解法

选择排序思想选择排序(Selection Sort)的基本思想是不断地从数组当中未排序的部分选取关键字最小的记录,并将该记录作为已排序部分的最后一个记录(考虑升序排列的情况)。算法主要就是维护一个给定数组的两个子数组:数组已排序的部分;数组未排序的部分;在选择排序的每一次迭代中,从数组中未排序的部分选择出最小元素(升序排列的情况),然后将其移入数组已排序的部分。初始时,给定一个数组,且将该数组当中的所有元素都被划分为无序部分:遍历数组 [0,7],找到下标为 5 最小的关键字 13:下

2020-06-23 18:25:41 2952 2

原创 U版YOLOv5学习笔记之训练初始化

源码链接:https://github.com/ultralytics/yolov5/blob/master/train.py在这里插入代码片

2020-06-22 23:23:56 1181

转载 pytorch之cudnn.benchmark和cudnn.deterministic

问题在很多情况下我们都能看到代码里有这样一行:torch.backends.cudnn.benchmark = true而且大家都说这样可以增加程序的运行效率。那到底有没有这样的效果,或者什么情况下应该这样做呢?解决办法总的来说,大部分情况下,设置这个 flag 可以让内置的 cuDNN 的 auto-tuner 自动寻找最适合当前配置的高效算法,来达到优化运行效率的问题。一般来讲,应该遵循以下准则:如果网络的输入数据维度或类型上变化不大,设置 torch.backends.cudnn.

2020-06-21 23:41:34 780

原创 LeetCode之二叉树中的最大路径和

题目链接:https://leetcode-cn.com/problems/binary-tree-maximum-path-sum/解题步骤:求二叉树的最大路径和,即求以每个节点为根节点的二叉树的最大路径和,再取其中的最大值最大路径和可以通过:root->val + 左子节点最大贡献 + 右子节点最大贡献通过一个变量maxSum随时更新最大路径和接下来,完成每个节点最大贡献的求解就可以求解本题我们以示例2为例: -10 / \ 9 20

2020-06-21 15:59:25 356

原创 LeetCode之正则表达式匹配

题目链接:https://leetcode-cn.com/problems/regular-expression-matching/解题步骤:使用动态规划进行求解定义状态:dp[ i ][ j ]表示 s 的前 i 个字符是否能被 p 的前 j 个字符匹配转移方程:从已经求出来的dp[ i - 1 ][ j - 1 ]入手,考虑s[ i ]、p[ j ]的各种情况如果s[ i - 1 ] == p[ j - 1 ] || p[ j - 1 ] == ‘.’,dp[ i ][ j ] = dp[

2020-06-20 22:12:59 222

原创 LeetCode之二进制求和

题目链接:https://leetcode-cn.com/problems/add-binary/解题步骤:求和肯定会遇到进位问题,用字符变量carry表示进位,'0’表示没有进位,'1’表示有进位规定字符串a的长度大于小于b的长度,并将结果存在a中首先,从尾部开始遍历b,分情况进行分析:如果carry和b[index]相等,和a[index]求和后,a[index]和carry都不需要改变,所以不需要考虑如果carry和b[index]不相等,a[index] == ‘0’,则a[inde

2020-06-19 22:44:11 156

原创 LeetCode之出现次数最多的子树元素和

题目链接:https://leetcode-cn.com/problems/most-frequent-subtree-sum/解题步骤:首先,我们需要求每个节点的子树元素和,每个节点的左右子节点的子树元素和就是该节点的子问题,因此,使用递归进行求解求出子树元素和后,还需要计算其出现的次数,使用hashmap存储子树元素和 和 次数的映射关系并通过一个变量记录出现最多的次数max最后遍历hashmap,找出出现次数为max的子树元素和C++实现:/** * Definition for

2020-06-19 22:16:23 229

原创 U版YOLOv5学习笔记之训练参数

源码链接:https://github.com/ultralytics/yolov5/blob/master/train.py使用字典存储模型的超参数# Hyperparametershyp = {'lr0': 0.01, # initial learning rate (SGD=1E-2, Adam=1E-3) 'momentum': 0.937, # SGD momentum 'weight_decay': 5e-4, # optimizer weight dec

2020-06-18 23:41:30 8007 11

原创 LeetCode之从先序遍历还原二叉树

题目链接:https://leetcode-cn.com/problems/recover-a-tree-from-preorder-traversal/解题步骤:根据题意,除根节点外,每个节点前面的’-'的数量表示该节点所在的层次由于使用深度优先搜索dfs,所以当一个节点接下来的节点层次小于等于当前层次,说明子节为空,直接返回空指针我们依次遍历字符串中每个节点的值,递归构建二叉树C++实现:/** * Definition for a binary tree node. * stru

2020-06-18 22:40:32 209

原创 空间可分离卷积和深度可分离卷积

一些简单而高效的轻量级模型,如,GoogLeNet中提到的Inception结构中将普通的3x3卷积替换为连续的1x3和3x1卷积,实际完成的是空间可分离卷积spatial separable convolution,如MobileNet、ShuffleNet、EffNet,都使用了深度可分离卷积depthwise separable convolution,其由逐通道卷积depthwise(DW)和逐点卷积pointwise(PW)两部分结合起来。和常规卷积操作一样,其输出为feature map。相比常

2020-06-18 16:44:00 3283

原创 LeetCode之二叉树的层序遍历

题目链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/解题步骤:题目要求层序遍历二叉树,自然想到使用广度优先搜索BFS进行解题我们可以借助队列queue来实现广度优先搜索基本思路是:先把根接节点放入队列取出根节点,并依次将根节点的非空左节点和非空右节点放入队列对每一层的所有节点都执行与根节点一样的操作,并将节点值放入同个列表中直到队列为空,返回所有列表C++实现:/** * Definiti

2020-06-17 22:59:38 294

原创 LeetCode之二叉树的序列化与反序列化

题目链接:https://leetcode-cn.com/problems/serialize-and-deserialize-binary-tree/解题步骤:通过前序遍历将二叉树序列化为字符串,前序遍历顺序:根节点、左子树、右子树节点间用","隔开,并用"null"表示空节点使用递归,我们可以得到序列:“1,2,null,null,3,4,null,null,5,null,null,”获得序列化字符串后,第一个值为根节点,接下来是左子树节点,右子树节点所以我们可以依次取到节点的值,并使用

2020-06-16 23:22:09 361

原创 LeetCode之恢复二叉搜索树

题目链接:https://leetcode-cn.com/problems/recover-binary-search-tree/解题步骤:二叉搜索树的中序遍历所有节点值的升序的,题目可以转换为恢复升序的中序遍历序列中序遍历序列顺序:左子树、根节点、右子树,使用递归获取中序遍历序列获取被交换的两个节点,如果a[ i ] > a[ i + 1],则可以确定第一个被交换节点,如果a[ i ] < a[ i - 1],则可以确定第二个被交换节点最后,交换两个节点的值C++实现:/

2020-06-16 22:12:26 184

原创 LeetCode之重建二叉树

题目链接:https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/解题步骤:二叉树的前序遍历顺序:根节点、左子树、右子树,并且对左右子树也采用前序遍历二叉树的中序遍历顺序:左子树、根节点、右子树,并且对左右子树也采用中序遍历所以,在二叉树的前序遍历序列中,根节点值为序列的第一个元素值在二叉树的中序遍历序列中,根节点位于序列的中间,且左子树的节点值位于根节点的值的左边,右子树的节点值位于根节点的值的右边通过前序遍历序列和中序遍历

2020-06-15 22:19:03 203

原创 LeetCode之交错字符串

题目链接:https://leetcode-cn.com/problems/interleaving-string/解题步骤:使用动态规划对本题进行求解:定义状态:dp[ i ][ j ]表示字符串s1下标 i 以前的串和字符串s2下标 j 以前的串是否可以交错组成字符串s3的前i + j位的子串。如果dp[ i ][ j ] == true,只需要判断s1[ i ] == s3[ i + j ] ? 、s2[ j ] == s3[ i + j ] ?确定转移公式:dp[ i + 1 ][

2020-06-14 19:14:16 263

原创 LeetCode之不同的二叉搜索树

题目链接:https://leetcode-cn.com/problems/unique-binary-search-trees/解题步骤:题目可以转换为求以i(1 <= i <= n)为根节点的不同结构的二叉树数量,然后相加就可以的出答案。假如我们以i为根节点,左子树由[ 1, i-1]构成,右子树由[i+1, n]构成。由于二叉搜索树左节点值小于根节点值,右节点值大于根节点值,并对所有子树都成立,所以左子树[1, i-1]与右子树[i+1, n]与原问题[1, n]是一样的,因此我们使

2020-06-13 16:48:35 128

原创 LeetCode之二叉树的中序遍历

题目链接:https://leetcode-cn.com/problems/binary-tree-inorder-traversal/解题步骤:递归的解法,只需要分三步就可以解决:递归遍历左子树,访问本节点,递归遍历右子树;非递归的解法,我们可以使用栈来实现递归的过程:当前节点cur = root如果cur != NULL, 将节点入栈,更新当前节点为左节点,cur = cur->left;如果cur == NULL,cur = 栈顶元素,并出栈更新当前节点为右节点,cur = cu

2020-06-13 12:44:11 117

原创 LeetCode之三数之和

题目链接:https://leetcode-cn.com/problems/3sum/解题步骤:从题意上看,暴力的解法就是使用三重循环遍历数组,判断a + b + c是否等于0,如果等于则将这个组合放进三元组集合中。但是使用这种解法提交时,会超出时间限制,而且很难满足题目中提到的答案中不可以包含重复的三元组的条件。基本思路都是枚举数组中的三个数,判断相加是否等于0,可以选确定a值,再枚举b、c:对数组进行排序选取第i个元素nums[ i ],0 <= i <= nums.size()

2020-06-12 22:23:11 132

原创 大小端详解(通过C语言如何判断)

大端(Big Endian)和小端(Little Endian)的定义:大端:高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。CPU对操作数的存放方式是从高字节到低字节。小端:低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。CPU对操作数的存放方式是从低字节到高字节。举例区分大小端下面以unsigned int value = 0x44332211为例,分别看看在两种字节序下其存储情况,我们可以用unsigned char buf[4]来表示value。Big-Endian

2020-06-11 23:59:54 2389

原创 冒泡排序(Bubble Sort)改进

冒泡排序算法基本步骤:比较相邻的元素,如果第一个比第二个大,就交换他们两个;对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。完成最后一对后,最后的元素应该会是最大的数;针对所有的元素重复以上的步骤,除了最后一个;持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。cpp实现1:冒泡排序最普通的实现void BubbleSort(vector<int>& nums) { int size = nums.size(); int

2020-06-10 22:30:05 222

原创 循环移位(C语言宏定义)

移位操作C语言中的移位运算符:左移(<<)、右移(>>),移位运算包含“逻辑移位”(logical shift)和“算术移位”(arithmetic shift)。逻辑移位:移出去的位丢弃,空缺位(vacant bit)用 0 填充。算术移位:移出去的位丢弃,空缺位(vacant bit)用“符号位”来填充,所以一般用在右移运算中。循环移位:将移出去的位依次填充到空...

2020-04-22 23:50:51 4583

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除