听徐宗本院士SLM所记
听徐宗本院士SLM所记起初是在大湾区科学论坛听到徐宗本院士所讲迁移学习,故作笔记如下
新的学习任务是否和过去的任务有关联,或关联程度如何
学习机器模型搭建是否好
原训练集和现在的训练集是否在一个阈值内。
数据自动化数据自选择
数据自校正
数据自生成
数据建模
网络自调节特征自调节
网络剪枝
自适应降维
信息单元参数化设计
结构组装
度量自构建样本相关损失函数确定
自适应损失函数确定
模型选择
算法自动化学习率自适应
Learning to optimize
Linux下模拟实现简单的Shell
Linux下模拟实现简单的Shell完整代码:https://github.com/JiaZhengJingXianSheng/Linux_Shell
一、 forkfork系统调用用于创建一个新进程,称为子进程,它与进程(称为系统调用fork的进程)同时运行,此进程称为父进程。创建新的子进程后,两个进程将执行fork()系统调用之后的下一条指令。子进程使用相同的程序计数器,相同的CPU寄存器,在父进程中使用的相同打开文件。
特点 1)在父进程中,fork返回新创建子进程的进程ID; 2)在子进程中,fork返回0; 3)如果出现错误,fork返回一个负值;
如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程。在子进程中,fork函数返回0,在父进程中,fork返回新创建子进程的进程ID。因此我们可以通过判断fork返回值来确定进程是子进程还是父进程。
二、 execvpexecvp() 会从PATH所指的目录中查找符合参数file 的文件名,找到后便执行该文件,然后将第二个参数 argv 传给该欲执行的文件。
如果执行成功则函数不会返回,执行失败则直接返回-1,失 ...
朴素贝叶斯分类器
朴素贝叶斯分类器完整代码:https://github.com/JiaZhengJingXianSheng/Naive-Bayes-Classify
基础贝叶斯分类的基础是概率推理,就是在各种条件的存在不确定,仅知其出现概率的情况下,如何完成推理和决策任务。 而朴素贝叶斯分类器是基于独立假设的,即假设样本每个特 征与其他特征都不相关。 朴素贝叶斯分类器依靠精确的自然概率模型,在有监督学习 的样本集中能获取得非常好的分类效果。
条件概率假设A,B是两个随机变量,它们的联合概率 P(A=x,B=y) 是指 A=x和B=y同时 发生的概率。
如果A和B是两个随机变量,且 P(B)≠0 。那么B条件下,A 的条件概率为$$P(A|B)=\frac{P(A,B)}{P(B)}$$我们用Ω代表总样本空间,P(A|B)的隐含假设是,B确定要发生。当确定B发生时, 样本空间不再是Ω,而是缩小成B。我们在B样本空间中 寻找A发生的概率。
贝叶斯定理贝叶斯定理 (Bayes theorem) ,是一种对属性集 X(现象,事件,特征向量)和类变量 Y(条 ...
视觉SLAM十四讲 Chapter4
李群与李代数参考书目 《视觉SLAM十四讲》 高翔 张涛 等著
参考链接: https://zhuanlan.zhihu.com/p/33156814
一、 李群与李代数基础1. 李群三维旋转矩阵构成了 特殊正交群 $SO(3)$ ,变换矩阵构成了 特殊欧式群 $SE(3)$$$SO(3)={R \in R^{3 \times 3} |RR^T=I,det(R)=1}$$
$$SE(3)={ T = \begin{bmatrix} R & t \ 0^T & 1 \end{bmatrix} \in R^{4\times4} | R \in SO(3),t \in R^3}$$
它们对于加法是不封闭的,换句话说两个变换矩阵相加后得到的矩阵并不是一个变换矩阵。
定义:李群就是具有 连续(光滑) 性质的群。
前面举的整数的加法的例子显然不是连续的,因而它不是李群。但SO(3) 和SE(3) 在实数空间上是连续的(机器人在三维空间中显然是连续地运动,而不会进行“瞬移”)。
问题: 为什么要用到李群和李代数?避免一直是数学 ...
视觉SLAM十四讲 Chapter3
三维空间刚体运动参考书目 《视觉SLAM十四讲》 高翔 张涛 等著
参考链接 https://zhuanlan.zhihu.com/p/32937868
一、 旋转矩阵1. 点、向量和坐标系我们一般用三维空间中的点来表示我们的物体,向量来表示点在空间中的移动,简单定义在这边不再赘述。
假定我们现在有向量 $a和b$ 用 $<a,b>$ 表示向量之间夹角,那么对外积而言我们定义 a与b的外积 = a^b ,外积的结果是一个向量,根据右手定则方向垂直于这两向量形成的平面,大小为 $|a||b|sin<a,b>$ ,我们把 a^ 称为 反对称矩阵 。
2. 坐标系间的欧式变换对于两个坐标系之间的变化,我们可以用 一个旋转和一个平移 表示,这种运动称为 刚体运动 。
我们的 欧式变换 就是由 旋转和平移 组成。假定我们某点在 $[e_1,e_2,e_3]^T$ 坐标系下坐标为 $[a_1,a_2,a_3]^T$ , 在 $[{e_1}^{‘},{e_2}^{‘},{e_3}^{‘}]$ 下坐标为 $[{a_1}^{‘},{a_2}^{‘},{a_3}^ ...
Linux下模仿实现readelf部分功能
模仿实现Linux下 $readelf$ 工具部分功能完整实现:https://github.com/JiaZhengJingXianSheng/ReadELF
ELF 目标文件格式的最前部是 ELF文件头 (ELF Header) ,它包含了描述整个文件的基本属性,比如 ELF 文件版本、目标机器型号、程序入口地址等。紧接是 ELF 文件各个段。其中ELF 文件中与段有关的重要结构就是 段表 (Section Header Table) ,该表描述了ELF 文件包含的所有段的信息,比如每个段的段名、段的长度、在文件中的偏移、读写权限及段的其他属性。
在 linux 下elf的定义存放在 $/usr/include$ 下, 我们可以用 $readelf -h$ 命令加上文件来查看ELF头文件。
1vim /usr/include/elf.h
ELF 的文件头中定义了 ELF 魔数、文件机器字节长度、数据存储方式、版本、运行平台、ABI版本、ELF 重定位类型、硬件平台、硬件平台版本,入口地址、程序头入口和长度、段表的位置和长度及段的数量等。
详细请参照: ...
Java简单策略模式
Java策略模式参考书目 《大话设计模式》 程杰 清华大学出版社
代码链接 https://github.com/JiaZhengJingXianSheng/Calculate_By_Java_Version2
本文是对上篇 Java简单工厂模式 的重写,以达到代码更易于维护的目的。
一、 定义接口与上篇不同,这篇我们选择定义接口,并在后续功能实现中, $implement$ 我们的接口。
接口定义加上参数,方便后期调用,定义如下
123public interface OperationInterface { double getResult(double A, double B) throws Exception;}
二、 定义运算接下来定义各种方法,来实现我们的接口。
123456public class OperationAdd implements OperationInterface { @Override public double getResult(double A, double B) { ...
Java简单工厂模式
Java简单工厂模式参考书目 《大话设计模式》 程杰 清华大学出版社
代码链接 https://github.com/JiaZhengJingXianSheng/Calculator_By_Java
我们在编写程序时为了容易修改,通常会用 封装、继承、多态 来降低程序的耦合度。
比如我们要实现一个简单的计算器功能,具体功能为传入两个数值和一个操作符,返回计算结果。
一、 抽象类创建通常我们会在一个抽象类内部定义主要的信息,比如输出输出等。
1234567891011121314151617181920212223public abstract class Operation { private double _numberA = 0; private double _numberB = 0; public double get_numberA() { return _numberA; } public void set_numberA(double _numberA) { this. ...
排序
C++常用排序代码链接 https://github.com/JiaZhengJingXianSheng/SortByCPlusPlus
选择排序选择排序可以将序列看作有序序列和无序序列的结合。如何理解这句话,我们拿第一个值当作标定,和后面所有值对比,找出小于标定的结果并进行交换。那么一轮交换就可以选出一个最小值,当我们标定不断后移就可实现排序。当然,标定应该在倒数第二个值终止,因为最后一个值并无后续。
1234567891011void selectSort(int* &arr, int len) { for (int i = 0; i < len - 1; i++) { for (int j = i + 1; j < len; j++) { if (arr[i] > arr[j]) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; ...
Seq2Seq
Seq2Seq以往的循环神经网络,输入的是不定长的序列,输出确是定长的,我们选取最长词并通过对短的词扩充来实现输出定长。但有些问题的输出不是定长的,以机器翻译为例,输入一段英语,输出对应法文,输入和输出大概率不定长,比如
英文:Beat it. 法文:Dégage !英文:Call me. 法文:Appelle-moi !
当输入输出序列不定长时,我们可以采用编码器-解码器(encoder-decoder)或Seq2Seq实现。
论文参考:https://arxiv.org/abs/1409.3215
编码器-解码器编码器和解码器分别对应输入序列和输出序列的两个循环神经网络。
编码器编码器将长度可变的输入序列转换成形状固定的上下文变量,并且将输入序列的信息在该上下文变量中进行编码。
假设输入序列是$x_1,x_2,x_3…x_T$ ,其中$x_t$是输入文本序列中第t个词原,用$h_t$ 来表示上一时间的隐藏状态,用函数$f$来描述为$$h_t=f(x_t,h_t−1)$$编码器的背景向量$$c = q(h_1,…,h_T)$$如果我们希望编 ...