1.【Busybox】Busybox源码分析-01 | 源码目录结构和程序入口
2.Swin Transformer
3.机器学习的源码特征重要性究竟是怎么算的
【Busybox】Busybox源码分析-01 | 源码目录结构和程序入口
Busybox是一个开源项目,遵循GPL v2协议。源码其本质是源码将多个UNIX命令集合成一个小型可执行程序,适用于构建轻量级根文件系统,源码特别是源码嵌入式系统设计中。版本1..0的源码内网ping工具源码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()执行对应命令。
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,phpgit源码分享 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ã 代表第ä¸å±éèå±çæ°éã
机器学习的特征重要性究竟是怎么算的
了解主流机器学习模型计算特征重要性的过程。常用算法包括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的标准适用于该类问题。