Algorithm Sort

Algorithm Sort

记录各种排序操作,暂时不补充最基础的排序方式和理论,只记录排序算法的拓展应用。

在理论分析的部分主要使用cpp进行撰写,而在具体使用的时候,目前会主要按照python来进行编写,这主要是面向的场景不同决定的。

基础的排序理论,包括快排等等算法的分析在另一篇文章中记录(当初实习准备的时候有整理过,后续重新整理出来)

排序算法和理论

placeholder

排序算法应用

placeholder

同步排序

常用于Machine Learning中,将数据集中的数据和标签进行同步排序,避免打乱其中的对应关系。

使用numpy的 argsort功能来进行排序:

1
2
3
idx = np.argsort(labels)
labels = labels[idx]
datas = datas[idx,...]


UniFramework 01
Hungarian

Hungarian

@AikenHong 2021
@Code: Scipy(repo)
@Reference: 匈牙利算法&KM算法

该篇笔记用来介绍匈牙利算法和KM算法(Kuhn-Munkres Algorithm),这两个算法通常用来做目标之间的匹配问题。
常用于:多目标跟踪,和深度聚类中的标签匹配问题。

Method

这两种方法实际上解决的问题都是: 二分图的最大匹配问题;
首先需要对二分图有个基本的了解:

二分图

实际上就是将数据分为两组,各组的每一个点都去另一个组找对应的匹配,我们希望将两组中,相关的数据尽可能的准确的匹配起来。

可以想象成,是同一个数据在不同的映射下的不同表征需要做这样的匹配关系。

解决这种问题的方式就是使用匈牙利算法或者KM算法

匈牙利算法

匈牙利算法是一种在多项式时间内求解任务分配问题的组合优化算法

匈牙利算法可以将二分图中的连线,看成是我们认为可能是相同的目标(不带权值),实际上就是从上到下假想成立,然后进行唯一匹配的搜索,有点像BackTrack的过程。

整体算法的成功率或者准确率实际上十分依赖与连线的准确率,对算法输出预测的准确度要求更高。


Cherno的cpp教程笔记

Cherno的cpp教程笔记

this notebook is based on Cherno‘s Video Class in YouTube;if there is sth get confused,I can recheck the video which talk about it, or just google it.

  • this is not totally for newbie, so some basic information we should search it
  • And this is a important websize to tell us basic info about C++.

FSL前期调研
Survey for Few-Shot Learning

Survey for Few-Shot Learning

@aikenhong 2020
@h.aiken.970@gmail.com

另一个综述文章:https://zhuanlan.zhihu.com/p/61215293
对该文中一些内容有一些补充,可以看看

FSL简介:https://blog.csdn.net/xhw205/article/details/79491649

GCN用于FSL:https://blog.csdn.net/qq_36022260/article/details/93753532

Abstract

FSL的根本目的就是弥合人工智能和人类之间的鸿沟,从少量带有监督信息的示例中学习。像人类一样有很高的泛化能力。这也能解决在实际应用场景中,数据难以收集或者大型数据难以建立的情景。

FSL的核心问题是:经验风险最小化器不可靠;那么如何使用先验知识去解决这个问题?

三个主要的角度:

  1. 数据:使用先验知识增强数据的监督经验
  2. 模型:使用先验知识来降低假设空间
  3. 算法:使用先验知识来改变搜索最佳假设(来进行搜索?)

现阶段针对FSL提出的一些相关的机器学习方法:
meta-learning; embedding learning; generative modeling etc.

本文的主要工作:


IL-MgSvF

IL-MgSvF

@Author & Paper:Arxiv
@Note:Aikenhong 2021/11/12

Other’s Note 1

Intro

旧知识的缓慢忘记和新知识的快速适应的困境:主要探讨Incremental中的Old和New的相互牵制和适应的问题,

旧知识的缓慢遗忘会导致对新任务的欠拟合,而快速适应会导致灾难性的遗忘,如何对这两种策略之间进行权衡,是一个重要的问题。

image-20211112110043089

多尺度混合的解决这个问题:

  • Intra-space: 新类别的特征在同一个特征空间中
  • inter-saoce:新旧类别的特征在不同的特征空间中

本文提出的多粒度策略

  1. 提出了一种频率感知的正则化操作,加速空间内的增量学习能力
  2. 新的特征空间组合操作,提升空间间的学习性能

SSL-MoCov3

SSL-MoCov3

@Aiken 2021

恺明大神对自监督学习+transformer的实证研究,针对Transformer再自监督学习学习框架中的训练不稳定问题提出了Random Patch Projection的解决方案。

ArticlePaper

Motivation

ViT的方法在自监督学习的任务中,精度下降的主要原因是由于算法的不稳定性,容易陷入局部的最优值,本文主要聚焦于采用视觉领域的自监督框架进行Transformer的训练,CNN的训练方法已经是一个比较明确约定俗称的方法,而Transformer的训练架构实际上还没有被完全的构建。


python 与标记语言的交互

python 与标记语言的交互

对于各种形式的标记文档(markup)和数据集的处理进行一个整合,还有一些python中的相关模块(比比如glob,后续可能会迁移到别的文档中),主要包括:yaml,json,csv,xml,这些可拓展的标记语言.

TODO:

  • [ ] csv,xml:这一部分可以看一下吉仲师兄那边是怎么存和取文件的,继承一下代码减少我这一部分的工作量
  • [ ] 按照csv文件对数据集进行本地的文件夹切分。实际上很多数据集,像mini-imageNet这类的是需要我们下载下来之后按照csv文件对训练集和测试集进行切分的
  • [ ] 使用sklearn对完整的未切分数据进行切分。

Python: Glob

文件操作相关模块,用于简单的路径匹配的模块,用来查找路径中的相关文件,基本的正则匹配规则如下:

“*”: 匹配0哥或多个字符

“?” : 匹配单个字符

“[ ]”: 匹配指定范围内的字符,如[0-9]匹配所有的数字

glob.glob:

返回所有匹配的路径列表,只有一个参数pathname,定一乐文件路径的匹配规则,可以是绝对路径或者是相对路径,具体的使用可以参考如下的方式:

1
2
3
4
5
6
7
8
9
10
11
12
for xmlpath in glob.glob('media/all/DATAPART/' + "*")
# xmlpath 遍历文件夹下的所有文件和文件夹

for xmlpath in glob.glob(xmlpath + "/*/*")
# xmlpath 遍历文件夹下所有文件夹中的文件夹中的文件:按照层数自由设定

img_path = sorted(glob.glob(os.path.join(images, '*.npy')))
# 遍历文件夹下的所有npy文件,说实话感觉这个怪离谱的,晚点试一下

import glob
print(glob.glob(r"E:/imgdir/*/*.jpg"))


C++的常见数据类型和操作

C++的常见数据类型和操作

主要介绍一些常用数据类型的一些method,区别还有一些特殊的定义;

priority_queue 默认是大顶堆,great的话是小顶堆,less的话是大顶堆,自定义的话不知道是不是一致的

set默认top是小顶,这个大小我就不知道了,自定义的话,好像和我想得是一致的

所有的动态容器都是存放在heap上的,像是什么Vector,String,unordered_map之类的

指定精度的输出和计算

在腾讯的笔试中出现的需要指定精度和指定的计算精度的分析,在使用常数的时候一定要使用.0去修正一个方法。

Vector 动态数组

Vector中的一些常用的函数,方法,以及一些属性介绍和辨析

emplace_back & push_back(在末尾添加元素)

empalce_back直接在数组的末尾进行构造,而push_back借助于构造的临时变量再将其加入数组末尾,所以在一些操作中empalce_back对于空间时间的效率是会更高的,但是如果我们有重复构筑的数据的话,可能就需要使用push_back

要注意实际上vector中并没有append的方法。