NCNN 源码剖析(二) Blob
NCNN 中的 Blob
NCNN 中的 Blob
NCNN 中的 example
下载的 repository 依赖于子模块,但是 clone 这个 repository 时子模块不会被 clone 下来,要完整编译运行这个 project 需要把其子模块下载下来.
切换 pwd 到这个 repository 执行如下命令,下载其依赖的全部子模块
1 | git submodule update --init --recursive |
今天的笔记,记得很是凌乱
卷积神经网络的训练流程大致可分为以下几步:
k 近邻法(k-nearest neighbor, k-NN)是一种基本分类与回归方法.k 近邻法的输入为实例的特征向量,对应于特征空间的点;输出为实例的类别,可以取多类.k 近邻法假设给定一个训练数据集,其中的实例类别已定,分类时,对新的实例,根据其 k 个最近邻的训练实例的类别,通过多数表决等方式进行预测.
k 近邻法实际上利用训练数据集对特征向量空间进行划分,并作为其分类的模型.k 值的选择,距离度量以及分类决策规则是 k 近邻法的三个基本要素.
输入: 训练数据集
其中,
实例特征向量
输出: 实例
(1) 根据给定的距离度量,在训练集 T 中找出与 x 最邻近的 k 个点,涵盖这 k 个点的 x 的邻域记作
(2) 在
上式中,
k 近邻法的特殊情况是
k 近邻法使用的模型实际上对应于对特征空间的划分.
模型由三个基本要素: 距离度量, k 值的选择和分类决策规则 决定.
在 k 近邻法中,当训练集,距离向量(如欧式距离), k 值及分类决策规则(如多数表决)确定后,对于任何一个新的输入实例,它所属的类唯一地确定.
特征空间中,对于每个训练实例
特征空间中两个实例点的距离是两个实例点相似程度的反映,k 近邻模型的特征空间一般是 n 维实数空间
设特征空间
这里
当
当
余弦相似度衡量的是连个向量之间的夹角大小,通过夹角的余弦值表示结果,因此两个向量A, B(推广到 n 维空间中)的余弦相似度为
上值越接近 1, 表示两个向量越相似.
余弦相似度度量的是向量之间的方向差异,所以具体使用哪种度量方法要结合实际应用,侧重于方向上的度量应使用余弦相似度,即不侧重其数值的大小;如果侧重于数值的大小而不侧重于方向,应使用
k 的选择对 k 近邻法的分类结果影响很大.
当 k 的值较小时,则只用输入实例的较小邻域中的训练实例进行预测,学习的近似误差(approximation error)会减小,但是学习的估计误差(estimation error)会增大,即分类结果对邻域中的实例点非常敏感,如果邻近的分类点中有噪声,那么预测结果就会出错.即 k 值的减小意味着整体模型变得复杂,容易发生过拟合.
当 k = 1 时,则训练数据中与输入实例最近似的向量为预测结果.
当 k 的值较大时,则相当于使用输入实例的较大邻域中的训练实例进行预测.学习的估计误差(estimation error)会减小,但是近似误差(approximation error)会增大.与输入实例较远的实例也会影响预测结果. k 值的增大意味这整体模型变得简单,容易欠拟合.
当 k = N 时,那么无论输入实例是什么,都会简单的预测为训练实例中最多的类,这时的模型过于简单.
在应用中,k 值一般取一个比较小的数值.通常采用交叉验证法来选取最优的 k 值.
k 近邻法中的分类决策规则多采用多数表决,即由输入实例的 k 个邻近的训练实例中的多数类决定输入实例的类.
多数表决规则(majority voting rule)有如下解释: 如果分类的损失函数为 0-1损失函数,分类函数为
那么误分类的概率为
对于给定的实例
要使误分类最小即经验风险最小,就要使
kd 树是二叉树,表示对 k 维空间的一个划分.构造 kd 树相当于不断地用垂直于坐标轴的超平面将 k 维空间切分,构成一系列的 k 维空间超矩形区域, kd 树的每个结点对应于 k 维超矩形区域.
输入: k 维空间数据集
输出:kd 树
输入: 已构造的 kd 树;目标点 x
输出: x 的最近邻.
在 Linux 下使用如下方法创建 ICMP 套接字
1 | int sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_ICMP); |
发现即使切换到 root 用户仍然会提示 permission denied, 搜索 stackoverflow 有人建议执行如下命令
1 | sudo sysctl -w net.ipv4.ping_group_range="0 0" |
这行命令定义了可以创建 non-raw ICMP socket(非原始 ICMP 套接字这么翻译?) 的用户组的范围,默认是 1 0, 任何人都不可以,即使是 root 用户.
实际上这行命令更改了 /proc/sys/net/ipv4/ping_group_range 文件的内容,关于 /proc 目录,它的挂载点并不是磁盘文件系统,它是一个伪文件系统,只存在于内存中,允许在运行时访问内核和进程的信息.