皮皮网

【绘图软件编写源码】【能量公式源码】【财富生肖源码】feature源码

2024-11-20 06:26:10 来源:海免溯源码什么时候有的

1.【Busybox】Busybox源码分析-01 | 源码目录结构和程序入口
2.机器学习的特征重要性究竟是怎么算的
3.Swin Transformer

feature源码

【Busybox】Busybox源码分析-01 | 源码目录结构和程序入口

       Busybox是一个开源项目,遵循GPL v2协议。其本质是将多个UNIX命令集合成一个小型可执行程序,适用于构建轻量级根文件系统,特别是嵌入式系统设计中。版本1..0的绘图软件编写源码Busybox体积小巧,仅为几百千字节至1M左右,动态链接方式下大小更小。其设计模块化,可灵活添加、去除命令或调整选项。

       Busybox程序主体在Linux内核启动后加载运行,入口为main()函数,位于libbb/appletlib文件末尾。通过条件分支处理,决定以库方式构建。在函数体中,使用mallopt()调整内存分配参数以优化资源使用。接着通过条件宏定义,能量公式源码控制代码编译逻辑,如在Linux内核启动后期加载并运行Busybox构建的init程序。命令行输入时,Busybox会解析参数,执行对应操作。

       在源码中,通过char * applet_name表示工具名称,调用lbb_prepare()函数设置其值为“busybox”。之后解析命令行参数,财富生肖源码如在mkdir iriczhao命令中,解析到mkdir命令传递给applet_name。配置了FEATURE_SUID_CONFIG宏定义时,会从/etc/busybox.conf文件中解析配置参数。最后,执行run_applet_and_exit()函数,根据NUM_APPLETS值决定执行命令或报错。

       在命令行下键入命令后,执行关键操作的置顶源码分析函数是find_applet_by_name()和run_applet_no_and_exit()。编译构建并安装Busybox后,可执行程序和命令链接分布在安装目录下。从源码角度,命令有一一对应的执行函数,通过命令表管理命令入口函数。在代码执行逻辑中,首先调用find_applet_by_name()获取命令表数组下标,再传递给run_applet_no_and_exit()执行对应命令。

机器学习的零源码编译特征重要性究竟是怎么算的

       了解主流机器学习模型计算特征重要性的过程。常用算法包括xgboost、gbdt、randomforest、tree等,它们都能输出特征的重要性评分。本文将重点阐述xgboost和gbdt特征重要性计算方法。

       xgboost计算特征重要性涉及到复杂的过程。在xgboost R API文档中能找到部分解释。在Python代码中,通过get_dump获取树规则,规则描述了特征在决策树中的使用情况。然而,原始的get_score方法输出的仅为统计值,包含权重、增益和覆盖度,未转换为百分比形式,这还不是真正的特征重要性得分。在xgboost的sklearn API中,feature_importance_方法对重要性统计量进行归一化处理,将之转换为百分比形式,计算分母为所有特征的重要性统计量之和。默认情况下,xgboost sklearn API计算重要性时使用importance_type="gain",而原始get_score方法使用importance_type="weight"。

       对于gbdt,首先查找BaseGradientBoosting类,得到feature_importances_方法的源码。进一步追踪至tree模块,发现特征重要性来源于tree_.compute_feature_importances()方法。关于gbdt评估特征重要性的标准,存在疑问:它是依据分裂前后节点的impurity减少量进行评估。impurity的计算标准取决于节点的分裂标准,如MSE或MAE,具体在_criterion.pyx脚本中有所说明。gbdt中的树都是回归树,因此计算impurity的标准适用于该类问题。

Swin Transformer

       ç›®å‰transformer从语言到视觉任务的挑战主要是由于这两个领域间的差异:

        为了解决以上两点,我们提出了层级Transformer,通过滑动窗口提取特征的方式将使得 self.attention 的计算量降低为和图像尺寸的线性相关。

        我们观察到将语言领域迁移到视觉领域的主要问题可以被总结为两种:

       åœ¨æºç å®žçŽ°ä¸­ä¸¤ä¸ªæ¨¡å—合二为一,称为 PatchEmbedding 。输入图片尺寸为 的RGB图片,将 4x4x3 视为一个patch,用一个linear embedding 层将patch转换为任意dimension(通道)的feature。源码中使用4x4的stride=4的conv实现。->

        这是这篇论文的核心模块。

        window partition 分为 regular window partition 和 shift window partition ,对应于 W-MSA 和 SW-MSA 。通过窗口划分,将输入的 feature map 转换为 num_windows*B, window_size, window_size, C ,其中 num_windows = H*W / window_size / window_size 。然后resize 到 num_windows*B, window_size*window_size, C 进行attention。源码如下:

        由 regular window partition 模块 和 mutil-head self attention 模块组成。

        W-MSA相比于直接使用MSA主要是为了降低计算量。传统的transformer都是基于全局来计算注意力,因此计算复杂度非常高。但是swin transformer通过对每个窗口施加注意力,从而减少了计算量。attention的主要计算过程如下:

        假设每一个 window 的区块大小为 ,输入的尺寸为 ,以下为原始的 和 的计算复杂度:

       è™½ç„¶ 降低了计算量,但是由于将attention限制在 window 内,因此不重合的 window 缺乏联系,限制了模型的性能。因此提出了 模块。在 MSA 前面加上一个 cycle shift window partition

        swin transformer中没有使用 pooling 进行下采样,而是使用了和yolov5中的 focus 层进行 feature map 的下采样。 -> ,在使用一个全连接层-> ,在一个stage中将feature map的高宽减半,通道数翻倍。

       åŸºå‡†æ¨¡åž‹ç»“构命名为 Swin-B ,模型大小和计算复杂度和 ViT-B / DeiT-B 相近。同时我们也提出了 Swin-T , Swin-S 和 Swin-L ,分别对应 0.× , 0.5× 和 2× 倍的模型尺寸和计算复杂度。 Swin-T 和 Swin-S 的计算复杂度分别和 ResNet- 、 ResNet- 相近。 默认设置为7。 代表第一层隐藏层的数量。