- 博客(84)
- 资源 (3)
- 收藏
- 关注
原创 多标签分类任务-服装分类
首先分清一下multiclass和multilabel:多标签任务的难度主要集中在以下问题:现有的方法应对multi的预测主要有2大路线:而一般研究最多的应对relation会有3种策略:一阶策略:忽略和其它标签的相关性,比如把多标签分解成多个独立的二分类问题。二阶策略:考虑标签之间的成对关联,比如为相关标签和不相关标签排序。高阶策略:考虑多个标签之间的关联,比如对每个标签考虑所有其它标签的影响。它的基本思路与ResNet一致,但是它建立的是前面所有层与后面层的密集连接(dense connectio
2022-06-29 00:54:36
1622
1
原创 Ubuntu终端常用命令
cp [选项] 源文件或目录 目标文件或目录常用选项:-r 拷贝源的所有子目录和文件-i :相同时会让用户选择是否覆盖,-f 是直接覆盖ls -a 列出当前目录文件(包括隐含文件)ls -l 列出当前目录下文件的详细信息ls -d */. 或 echo */. 查看当前文件子目录cd - 回上一次所在的目录cd ~ 或 cd 回当前用户的宿主目录mkdir 目录名: 创建一个目录rmdir 空目录名: 删除一个空目录rm 文件名 文件名: 删除一个文件或多个文件rm -r.
2022-02-17 16:19:23
1983
原创 C++中类的各种方法总结
说明:student为类名普通方法bool student::set(int a)构造方法不带参数student::student()带参数student::student(int a, string b)析构方法(用于销毁对象,节省内存)student::~student()常成员方法(只读不写)bool student::read() const静态成员方法(依赖于类,不依赖于任何一个对象)stacic int count()...
2022-02-14 22:08:21
1808
原创 Swin-Transformer详解
引言在各个cv领域都取得了非常不错的效果。整体框架可以看出他与VIT的主要区别就是SWIN的特征图和CNN类似,是具有层次性的,逐步下采样,所以在分割、检测任务会有更大的优势。而VIT是一次性下采样16倍。其次,通过在低层次的时候限制patch之间建立关系,即会把图片分隔成不同的大块,大块之间是没有交流的。这样就可以节省大部分没有必要的计算量。即(Windows Multi-self Attention机制)。细节patch partition和linear embedding4 *
2022-02-12 16:25:53
3356
原创 python中列表和字典前加星号*的作用
def add(a, b): return a + bdata = [4, 3]print(*data)data = {'a': 4, 'b': 3}print(*data)print(add(**data))
2022-02-10 15:05:58
621
原创 pytorch中nn.parameter和require_grad=True的区别
nn.parameter()首先可以把这个函数理解为类型转换函数,将一个不可训练的类型Tensor转换成可以训练的类型parameter并将这个parameter绑定到这个module里面(net.parameter()中就有这个绑定的parameter,所以在参数优化的时候可以进行优化的),所以经过类型转换这个self.v变成了模型的一部分,成为了模型中根据训练可以改动的参数了。torch.tensor([1,2,3],requires_grad=True)这个只是将参数变成可训练的,并没有绑定在m
2022-02-10 13:40:37
2491
原创 python实现牛顿法求二次根、三次根
公式:: k = n while abs(k*k-n)>1e-6: k = (k + n/k)/2 print(k)def cube_root(n): k = n while abs(k*k*k-n)>1e-6: k = k + (k*k*k-n)/3*k*k print(k)sqrt(2)cube_root(8)
2022-02-09 22:02:03
1013
原创 Vision-Transformer详解
引言(Transformer)transformer一开始提出为上面这篇论文,主要应用在NLP领域。在此之前,nlp主要使用RNN(记忆的长度是有限的,比较短,所以有了后面的LSTM),LSTM等时序网络, 且无法并行化训练(即必须先计算出t0时刻的数据,再计算t1时刻的数据),导致训练效率低。所以提出transformer,如果在硬件不受限制的情况下,他的记忆长度是无限的。而且可以做并行化。核心模块:self-attention计算q,k,v对(q*k) / np.sqrt(d)得到
2022-02-08 20:17:28
2487
原创 python实现二叉树层次遍历(BFS)
# 求二叉树路径DFSclass TreeNode: def __init__(self, val = None): self.left = None self.right = None self.val = valclass BTree: def insert(self,root,node): #构建二叉排序树 if root is None: return node if roo.
2022-01-23 22:28:02
1496
原创 python求二叉树所有路径(DFS)
# 求二叉树路径DFSclass TreeNode: def __init__(self, val = None): self.left = None self.right = None self.val = valclass BTree: def insert(self,root,node): #构建二叉排序树 if root is None: return node if root
2022-01-23 21:29:55
1350
原创 python合并有序链表(递归)
# 合并有序链表class ListNode: def __init__(self, value=None): self.value = value self.next = Nonedef Creat_Link_Tail(lst): head = ListNode(lst[0]) L = head for i in range(1, len(lst)): p = ListNode(lst[i]) L.nex.
2022-01-23 16:10:01
611
原创 python求最长回文子串
原理可参考链接:https://blog.csdn.net/sinat_35261315/article/details/78267046?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant.none-task-blog-
2022-01-23 11:43:16
977
原创 python求链表中的循环头节点(快慢指针方法)
class LinkNode(): def __init__(self,value = None): self.value = value self.next = Nonedef Creat_Link_Tail(lst): L = LinkNode(lst[0]) first_node = L for i in range(1, len(lst)): if type(lst[i]) == int: p
2022-01-22 23:46:03
439
原创 python求二叉树深度(递归)
def tree_deep(root): if not root: return 0 #说明上一个节点是叶子节点,开始逐步返回 left, right = 0, 0 if root.left: left = tree_deep(root.left) #左子树递归 if root.right: right = tree_deep(root.right) #右子树递归 return max(left, right) + 1
2022-01-22 23:18:33
1433
原创 python实现快速幂
原理可参考:https://blog.csdn.net/qq_19782019/article/details/85621386'''@param base 底数@param power 指数@return res 求幂结果的最后3位数 '''def fast_power(base, power): res = 1 while power > 0: if power % 2 == 1: res = res * base % 1000
2022-01-22 22:23:29
1704
原创 tensor.narrow()函数
input.narrow(dimension, start, length) → Tensor # 表示取变量input在第dimension维上,从索引start到start+length范围(不包括start+length)的值。example:In [2]: x = torch.Tensor([[1,2,3], [4,5,6], [7,8,9]])In [4]: x.narrow(0,0,3)Out[4]: tensor([[1., 2., 3.], [4., 5., 6
2022-01-19 22:01:52
1823
原创 Pytorch view和permute的区别
a = torch.tensor([[[1,2,3],[4,5,6]]])b = a.view(3,2)c = a.permute(0,2,1)print(a.size(),a)print(b.size(),b)print(c.size(),c)结果:a: torch.Size([1, 2, 3]) tensor([[[1, 2, 3], [4, 5, 6]]])b: torch.Size([3, 2]) tensor([[1, 2], [3, 4],
2022-01-19 19:12:43
895
转载 Cross Entropy Loss Function(交叉熵损失函数)理解
转自https://zhuanlan.zhihu.com/p/35709485
2022-01-18 11:51:01
243
原创 深度学习模型FLOPs详解
计算方法FLOPS:注意全大写,是floating point operations per second的缩写,意指每秒浮点运算次数,理解为计算速度。是一个衡量硬件性能的指标。FLOPs :注意s小写,是floating point operations的缩写(s表复数),意指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。其计算公式如下:不能只用FLOPs作为网络速度的指标原因:FLOPs没有考虑几个对速度有相当大影响的重要因素——MAC\并行度\平台1.MAC(Memory
2022-01-16 11:56:20
10284
原创 pytorch的dataset用法详解
torch.utils.data 里面的dataset使用方法当我们继承了一个 Dataset类之后,我们需要重写 len 方法,该方法提供了dataset的大小; getitem 方法, 该方法支持从 0 到 len(self)的索引from torch.utils.data import Dataset, DataLoaderimport torchclass MyDataset(Dataset): """ 下载数据、初始化数据,都可以在这里完成 """
2022-01-15 15:51:21
8538
原创 pytorch中DataLoader详解
import torchimport torch.utils.data as Dataif __name__ == '__main__': torch.manual_seed(1) # reproducible BATCH_SIZE = 5 # 批训练的数据个数 x = torch.linspace(11, 20, 10) # x data: tensor([11., 12., 13., 14., 15., 16., 17., 18., 19., 20.]) .
2022-01-15 13:40:17
5686
转载 python中@property和property()函数
前言@property是property()函数的语法糖(简便形式)在获取、设置和删除对象属性的时候,需要额外做一些工作。比如在游戏编程中,设置敌人死亡之后需要播放死亡动画。需要限制对象属性的设置和获取。比如用户年龄为只读,或者在设置用户年龄的时候有范围限制。这时就可以使用 property 工具,它把方法包装成属性,让方法可以以属性的形式被访问和调用。property()函数语法:property(fget=None, fset=None, fdel=None, doc=None) -&
2022-01-14 22:20:58
242
原创 python装饰器
函数装饰器import timedef decorator(func): def wrapper(*args, **kwargs): start_time = time.time() func() end_time = time.time() print(end_time - start_time) return wrapper@decoratordef fun(): time.sleep(0.8)fu
2022-01-14 21:44:17
303
1
原创 torch 的dataloader 的核心函数
官方解释:Dataloader 组合了 dataset & sampler,提供在数据上的 iterable主要参数:1、dataset:这个dataset一定要是torch.utils.data.Dataset本身或继承自它的类里面最主要的方法是 getitem(self, index) 用于根据index索引来取数据的2、batch_size:每个batch批次要返回几条数据3、shuffle:是否打乱数据,默认False4、sampler:sample strategy,数据选取策
2022-01-14 19:46:24
2179
原创 NMS和soft-NMS原理和代码实现
NMSpython实现代码:import numpy as npimport matplotlib.pyplot as pltdef py_cpu_nms(dets, thresh): x1 = dets[:, 0] y1 = dets[:, 1] x2 = dets[:, 2] y2 = dets[:, 3] scores = dets[:, 4] areas = (x2-x1+1)*(y2-y1+1) res = [] index = sco
2022-01-13 23:03:10
4827
原创 python的classmethod和staticmethod
静态方法(staticmethod)静态方法@staticmethod也是一个类方法,是可以直接类调用的。个人认为的使用场景是:只要要定义的方法里不涉及到self参数,就用静态方法承担。因为这样就表明这个方法和本身的类没有关系,明确的区别出类相关和不相关。class A: def __init__(self, a, b): self.a = a self.b = b def do_normal_something(self, a, b):
2022-01-13 21:33:37
514
原创 python中的__call__方法和其他类方法比较
call方法class A: def __init__(self, a, b): self.a = a self.b = b def __call__(self,a,b): print("123call",a,b)a = A(1,2)a(3,4) #相当于把实例变一个函数print(a.a,a.b)不得不引发出call和其他类方法的区别:实例化方法实例化的方法就是普通的类方法,它表达了类功能的多样性和抽象性,传入参数是se
2022-01-13 21:06:32
222
原创 python实现哈希表
# 实现hashtable,指定在key位置存入dataclass HashTable: def __init__(self): self.size = 11 self.slots = [None] * self.size # hold the key items self.data = [None] * self.size # hold the data values def hashfunction(self, key, size)
2022-01-13 20:43:16
1852
2
原创 python实现堆和堆排序
#堆heapclass heap(object): def __init__(self): self.data_list = [] def get_parent_index(self,index): if index==0 or index>len(self.data_list)-1: return None else: return (index-1)//2 def swap(.
2022-01-13 17:42:09
157
原创 python实现快速排序(QuickSort)
def Partition(lst,low,high): pivot = lst[low] while low<high: while low<high and lst[high]>=pivot: high -= 1 lst[low] = lst[high] while low<high and lst[low]<=pivot: low += 1 ls
2022-01-12 21:16:33
319
原创 python实现二叉排序树
#二叉排序树class BTree(): def __init__(self,data): self.left = None self.right = None if type(data) == list: self.data = data[0] for d in data[1:]: self.insert(d) else: sel
2022-01-12 17:29:01
1040
原创 python生成器和yield关键字
体验下列代码用于先体验普通列表推导式和生成器的差别:# def add():# temp = ["姓名", "学号", "班级", "电话"]# dic = {}# lst = []# for item in temp:# inp = input("请输入{}:".format(item))# if inp == "exit":# print("成功退出输入")# return
2022-01-12 14:59:07
230
原创 python迭代器
什么是迭代器迭代是python中访问集合元素的一种非常强大的一种方式。迭代器是一个可以记住遍历位置的对象,因此不会像列表那样一次性全部生成,而是可以等到用的时候才生成,因此节省了大量的内存资源。迭代器对象从集合中的第一个元素开始访问,直到所有的元素被访问完。迭代器有两个方法:iter()和next()方法。可迭代的对象类似于list、tuple、str 等类型的数据可以使用for …… in…… 的循环遍历语法从其中依次拿到数据并进行使用,我们把这个过程称为遍历,也称迭代。python中可迭代的对象有
2022-01-12 14:15:57
194
原创 python实现k-means算法
# -*- coding:utf-8 -*-import randomimport numpy as npfrom matplotlib import pyplotclass K_Means(object): # k是分组数;tolerance‘中心点误差’;max_iter是迭代次数 def __init__(self, k=2, tolerance=0.0001, max_iter=300): self.k_ = k self.tolera.
2022-01-10 09:21:57
721
原创 YOLO系列详解 目标检测
yolo v1前言相比同年的fast-rcnn和ssd都没有优势详解B=2,Pr(Object)为0或者1在v1中没有anchor的概念,预测的xywh是直接预测的box的位置,不像fast-rcnn和ssd中预测的这四个值都是相对我们anchor的回归参数。在预测时,输出的结果既包含了该box为某一个目标的概率,又包含了重合程度,与fast-rcnn和ssd直接预测的目标概率不一样。存在的问题:对群体小目标效果很差,比如一群鸟。因为对每个cell只预测2个boundi
2022-01-09 19:56:24
3016
原创 SSD网络
背景小目标效果差的原因:只对backbone最后一层的feature map进行rpn,最后这个map细节信息丢失严重。SSD模型步距为2时,padding为1,步距为1的时候,padding为0与faster-rcnn的区别是把box放在不同的特征层与fast-rcnn不同,这里是对每个default-box都生成4个边界框回归参数,不区分类别,即4k。而fast-rcnn是每个achor会针对每个类别都会生成相应的边界框回归参数,即4ck。正样本对每个gt-bo
2022-01-08 21:58:37
1191
原创 python实现矩阵乘法
# 2 3 3 4# 1 2 3# 4 5 6# 1 2 3 4# 5 6 7 8# 9 10 11 12lst1, lst2 = [], []n1,m1,n2,m2 = map(int,input().split())for i in range(n1): nums = list(map(int,input().split())) #输入一行数据 lst1.append(nums)for i in range(n2): nums = list(map(int,i.
2022-01-08 13:36:13
1457
原创 numpy实现NMS
import numpy as npimport matplotlib.pyplot as pltdef py_cpu_nms(dets, thresh): x1 = dets[:, 0] y1 = dets[:, 1] x2 = dets[:, 2] y2 = dets[:, 3] scores = dets[:, 4] areas = (x2-x1+1)*(y2-y1+1) res = [] index = scores.argsort()[::
2022-01-08 10:57:53
1909
原创 BN(Batch Normalization)详解,包含pytorch实现、numpy实现
起源对于神经网络来说,如果每一层的数据分布都不一样,后一层的网络则需要去学习适应前一层的数据分布,这相当于去做了domian的adaptation,无疑增加了训练难度,尤其是网络越来越深的情况。BN的那篇论文中指出,不同层的数据分布会往激活函数的上限或者下限偏移。论文称这种偏移为internal Covariate Shift,internal指的是网络内部。BN就是为了解决偏移的,解决的方式也很简单,就是让每一层的分布都normalize到标准正太分布。我们在图像预处理过程中通常会对图像进行标准化
2022-01-06 11:01:00
3663
原创 RCNN、Fast-RCNN和Faster-RCNN系列
R-CNN2014年Fast-RCNN2015年Faster-RCNNrpn head的输出是包括分类和回归,分类是二分类,只区分前景和背景;回归是仅仅对于前景样本(正样本)进行基于anchor的变换回归。rpn head的目的是提取roi,然后输入到rcnn head部分进行refine。 rcnn head的输出是包括分类和回归,分类输出是类别数+1(1是考虑背景),回归是仅仅对于前景样本不考虑分类类别进行基于roi的变换回归,rcnn hea
2022-01-02 20:24:42
1458
Mysql64.rar
2020-07-10
tomcat.rar
2020-07-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人