卷积神经网络
基础卷积神经网络的基本形式
整体结果为:
卷积层
如图所示,左边是输入,中间是卷积核,右边是输出。
如果输入为3通道,输出为2通道,那么卷积核需要6个,每三个卷积核卷积再求和可以得到一个输出
非线性激活函数种类:
其中现在最常使用的是ReLU函数,因为求导简单且不容易造成梯度消失
降采样层降采样层的作用是增大感受野,并且对形变不敏感。
max pooling: 在几个候选结果中选择最大值,例如4$\times$4到2$\times$2 也就是说原来4个映射到了现在的一个,映射规则为选取4个中的最大值
average pooling: 选取候选结果中的平均值
LeNet-5结构
C1的通道数为6,卷积核大小为5$\times$5
S2降采样层,28$\times$28降为14$\times$14
C3卷积层,卷积核$5 \times 5$,通道数16
CNN的问题和发展CNN的问题主要有过拟合、难收敛、计算代价大三点
AlexNetAlexNet是12年ImageNet比赛的冠军,当时其他人都适用概率的方法,AlexNet首次使用深度学习的方法比其他队高了十多个百分点,掀起了 ...
矩阵运算
LUP分解求线性方程组L、U、P是三个矩阵,满足PA = LU。其中L矩阵是一个单位下三角矩阵,U是一个上三角矩阵,P是一个置换矩阵。
我们要求解的是A x = b
\begin{aligned}
& Ax = b\\
& PAx = Pb\\
& LUx = Pb(根据上面的式子替换) \\
& 令Ux = y 得 \\
& Ly = Pb \\
\end{aligned}正向替换正向替换的目标是通过Ly = Pb来求y
我们可以使用一个$\pi [1…n]$来替换P。 对i = 1, 2, …, n, 元素$\pi [i]$表示$P_{i,\pi [i]} = 1$(第i行第$\pi [i]$列)。由于L是单位下三角矩阵,所以可以将式子写成
\begin{matrix}
y_1 & & & &= b_{\pi [1]}\\
y_2 l_{21} &+ y_2 & & &= b_{\pi [2]}\\
y_3 l_{31} &+ y_3 l_{32} &+ y_3 & &= b_{\pi [3]}\\
y_4 l_{41} &+ y_4 l_{42} &+ y_4 l_{43} ...
矩阵求解
直接解法高斯消去法高斯消去法是先将矩阵变为上/下三角矩阵,然后使用回带法进行求解,例如
\begin{bmatrix}
1 & 1 & 1 & 6\\
0 & 4 & -1 & 5\\
2 & -2 & 1 & 1
\end{bmatrix}\overset{r_3 - 2r_1}{\rightarrow}
\begin{bmatrix}
1 & 1 & 1 & 6\\
0 & 4 & -1 & 5\\
0 & -4 & -1 & -11
\end{bmatrix}\overset{r_3 - r_2}{\rightarrow}
\begin{bmatrix}
1 & 1 & 1 & 6\\
0 & 4 & -1 & 5\\
0 & 0 & -2 & -6
\end{bmatrix}因此$x_3 = 3 , x_2 = 2 , x_1 = 1$
\begin{bmatrix}
a_{11} & a_{12} & \dots & a_{1n}\\
0 & a_{22} & \dots & a_{2n}\\
\vdots & \vdots & & \vdo ...
进程与线程
概念进程是正在运行的程序,它包含代码和执行状态(栈堆寄存器等)。而程序仅仅是一些静态的代码。一个程序可以生成多个进程(如记事本进程)。进程是资源分配最小单元
Linux系统进程Linux进程是采用进程树的方式。程序开始时创建一个零号进程,然后零号进程创建一号进程再由一号进程创建其他的进程。linux进程是一种树状结构,可以通过pstree命令查看进程树。
sys/types.h:储存了一些宏定义如pid_t#include <sys/wait.h>
fork():创建当前进程的子进程,并且子进程和当前进程完全相同。
返回值:返回两个返回值,如果返回值是零,代表当前在子进程中。如果返回值>0,代表在父进程中并且返回值是子进程pid,如果返回值<0,代表出错。
注意: 这里复制子进程是采用copy on right的方式,即开始子进程与父进程完全相同,只有当子父进程之间有差异时才会额外开辟空间储存差异。
例:#include<stdio.h>int main(){ int pid = fork(); if(pid < 0) ...
计算几何基础
判断两直线是否相交P(x1,y1) Q(x2,y2) 两向量的叉积为 x1*y2-x2*y1
如果 $p\times q$>0 p在q的顺时针方向(右手螺旋定则)
$p \times q$<0 p在q的逆时针方向
=0 ,共线或反向
先做一次快速排斥实验,判断下一个线段中 x 较大的端点是否小于另一个线段中 x 较小的段点,若是,则说明两个线段必然没有交点,同理判断下 y
代码
max(C.x,D.x)<min(A.x,B.x) || max(C.y,D.y)<min(A.y,B.y) ||max(A.x,B.x)<min(C.x,D.x) || max(A.y,B.y)<min(C.y,C.y)
如图所示,如果想判断两线段相交,只需要判断A 和 B在cd两侧即可
所以只需要 向量AD*CD与 BD*CD异号即可
如果端点正好在另一条线段上,两者乘积等于0
如果两者平行,叉积也为0但是可以在快速排斥实验中排除掉
总代码
struct Line { double x1; double y1; double x2; ...
计算机系统综合实践报告
实验进度
任务
完成
必做任务1
完成
必做任务2
完成
必做任务3
完成
必做任务4
完成
选做任务1
完成
选做任务2
完成
选做任务3
完成
思考题思考题1段选择符index是$2^13$,最多可以$2^13$个段描述符
思考题2不可以,因为虚拟地址就是需要通过GDT进行转换,如果GDT的首地址都是虚拟地址那么就没有东西可以转换GDT的虚拟地址了
思考题3在段寄存器中保存基地址和限制
思考题4段的体积大,在内存中无法做到连续存储,容易形成外碎片,降低内存利用率。
思考题5分页式管理便于进行内存调度,并且没有外碎片,内碎片不超过页的大小
思考题6因为低12位是页内偏移,可以直接根据虚拟地址给出,不需要进行转换
不能,GDT使用线性地址一样,CR3是用于物理地址转换的,如果他也是虚拟地址就没有什么可以转换CR3的线性地址了。
一级页表有占用内存过多的缺点。而二级页表虽然看上去消耗内存反而增大了,但是实际上很多对应ptable并没有实际创建因而减小了内存。
思考题7空指针并不是空的,只是指向的地址是0,属于操作系统无法访问。
...
回溯法和分支限界法
回溯法回溯法概念回溯法是一种能避免不必要搜索的穷举式算法,适用于一些解空间相当大的问题。
它经常呈现一种树形结构,先进入左节点,当到了底部或者条件不满足时返回父节点并进入右节点。一个典型的例子就是深度优先搜索
如果不加限制条件直接搜索的话复杂度将是2^n。因此我们需要添加一些限界函数来减小搜索量。
限界函数一般有两个,一个是用来限制左支的,叫显式约数条件。另一种是限制是否搜索右支的,叫隐式约束条件。
n叉树模板:
实例01背包问题01背包问题最常见的办法是动态规划算法.这里介绍回溯法求解
将物品按密度进行排序
设bestp是当前最好收益并初始化为负无穷
设bound = cp+r是效益值的上界。其中cp是这个节点的收益值,r是剩下所有物品的连续背包问题收益值(也就是说不满一件也可以装进去)
展开左子节点:
如果cw+Wk
后缀树
介绍后缀中的后缀是一个字符串的所有后缀。例如abcde的后缀有5个,分别是abcde,bcde,cde,de,e。
后缀树是一种字符串算法,它可以被用于字符串搜索,寻找最长公共子串,查找匹配次数等。常见的匹配算法如KMP算法都是在模式串上做文章,而后缀树确实在匹配串上构建的。
后缀树需要满足五条性质:
如果字符串长度为n,那么后缀树中有n个叶子
除了根节点,所有除叶结点外的节点都至少有两个儿子
每条边上都标有非空子串S
没有同一个点延伸出的两条边上标记的字符串首字母相同
从根节点拼接每条边的子串到叶结点便可以获得一个后缀
如图左边是BANANAS的后缀树,右边abcabx的后缀树。
是否存在abcab的后缀树呢?
答案是不存在,因为现在ab的后缀是abcab的前缀,也就是说现在想要满足条件4那么原来连接叶子节点4的边中子串要由x变成空串,但是这又违反了规则3.
为了避免上述问题,可以在字符串后面加上一个不在字符集中的字符$
应用
查询字符串是否是某一字符串的子串: 使用后缀树进行匹配,如果匹配串所有字符匹配成功则为子串
查询是否为后缀: 如果匹配到叶子节点正好匹配结束则为后缀 ...
函数逼近
基础当我们使用插值时经常遇到一个问题,采样点过多怎么办?采样点如果多余真实函数的次数那么就是方程数多余未知量的数目,这时我们反而无法直接得到精确解。因此需要使用逼近的方法得到近似解。
范数为了对线性空间中的元素大小进行衡量,引入了范数的概念。
范数的定义:
||x||_n = \sum_{i=1}^{n} (|x_i |^n )^{\frac{1}{n}}
1-范数: $||x||1 = \sum{i=1}^{n}|x_i |$
2-范数: $||x||2 = \sum{i=1}^{n} (x_i^2 )^{\frac{1}{2}}$
$\infty -$范数: $||x||_{\infty} = \underset{1 \le i \le n}{max} |x_i |$
根据这个我们可以定义最佳逼近。函数拟合也就是函数逼近,即寻找一条曲线让他和目标曲线的差距最小。而这个差距就可以使用前面所说的范数。
最佳一致逼近: 在无穷范数意义下的最小值,即$||f(x) - p^* (x) ||{\infty} = \underset{p \in H_n}{min}||f(x) - p(x ...
光流估计
定义光流在计算机视觉中表示物体的移动,由于相机和物体之间存在相对运动,因此多帧之间的图像像素强度值不同,通过连续检测运动物体帧之间的强度变化,可以估计出物体的运动信息。
光流法基本假设条件
亮度恒定不变: 即同一目标的不同帧之间,亮度不会改变,通过它可以得到光流法的基本方程
小范围运动: 点在相邻帧之间不会发生大范围的运动
光亮恒定不变假设产生的方程为将右侧进行泰勒展开可得
$I_x$为相邻帧之间x位置变化量,$I_t$是时间变化量,如果是后一帧则为1,前一帧则为-1其中有u和v两个变量,因此我们需要加入额外的约束条件。
不同的约束条件变产生了额外的方法
Lucas-Kanada方法L-k方法假设相邻像素之间位移相似。然后根据这一假设选取像素点附近一个窗口,这个窗口内的位移相同,然后联立这些方程可得:
这种方法的问题是需要联立矩阵求解,因此它的特征值不能过大或过小
如图是特征值对应的区域类型, Flat是平滑区域,edge是边界
此外,为了解决小范围运动的问题,可以通过建立图像金字塔解决。因为图像分辨率小,每次移动的像素点就少。
FlowNetFlowNet的结构
它还是 ...