皮皮网

【书城 源码】【hash源码分析】【dubbo心跳源码】框分类源码_分类框架

来源:房卡麻将 源码 时间:2024-12-23 18:56:15

1.gin框架原理详解(gin框架是框分什么)
2.MFC编程 -- 高级列表框添加数据
3.AI与PDE(七):AFNO模型的源代码解析
4.swin transformer理解要点
5.UE4源码剖析——Actor蓝图之CDO与SCS
6.如何改变框架网页标题

框分类源码_分类框架

gin框架原理详解(gin框架是什么)

       Gin的启动过程、路由及上下文源码解读

       Engine是类源类框gin框架的一个实例,它包含了多路复用器、码分中间件和配置中心。框分

       gin通过Engine.Run(addr...string)来启动服务,类源类框最终调用的码分书城 源码是/手败gin-gonic/gin

       一个简单的例子:

       packagemain

       import"github.com/gin-gonic/gin"

       funcmain(){

       //Default返回一个默认的路由引擎

       r:=gin.Default()

       r.GET("/ping",func(c*gin.Context){

       //输出json结果给调用方

       c.JSON(,gin.H{

       "message":"pong",

       })

       })

       r.Run()//listenandserveon0.0.0.0:

       }

       编译运行程序,打开浏览器,框分访问页面显示:

       { "message":"pong"}

       gin的类源类框功能不只是简单输出Json数据。它是码分一个轻量级的WEB框架,支持RestFull风格API,框分支持GET,类源类框POST,码分PUT,框分PATCH,类源类框DELETE,码分OPTIONS等/gin-gonic/gin"

       )

       funcmain(){

       router:=gin.Default()

       //静态资源加载,本例为css,js以及资源

       router.StaticFS("/public",/ffhelicopter/tmm/website/static"))

       router.StaticFile("/favicon.ico","./resources/favicon.ico")

       //Listenandserveon0.0.0.0:

       router.Run(":")

       }

       首先需要是生成一个Engine,这是gin的核心,默认带有Logger和Recovery两个中间件。

       router:=gin.Default()

       StaticFile是hash源码分析加载单个文件,而StaticFS是加载一个完整的目录资源:

       func(group*RouterGroup)StaticFile(relativePath,filepathstring)IRoutes

       func(group*RouterGroup)StaticFS(relativePathstring,fs/gin-gonic/gin

       如果安装失败,直接去Githubclone下来,放置到对应的目录即可。

       (2)代码中使用:

       下面是一个使用Gin的简单例子:

       packagemain

       import(

       "github.com/gin-gonic/gin"

       )

       funcmain(){

       router:=gin.Default()

       router.GET("/ping",func(c*gin.Context){

       c.JSON(,gin.H{

       "message":"pong",

       })

       })

       router.Run(":")//listenandserveon0.0.0.0:

       }

       简单几行代码,就能实现一个web服务。使用gin的Default方法创建一个路由handler。然后通过HTTP方法绑定路由规则和路由函数。不同于net/e"}。

       注:Gin还包含更多的返回方法如c.String,c.HTML,c.XML等,请自行了解。可以方便的返回HTML数据

       我们在之前的组v1路由下新定义一个路由:

       下面我们访问

       可以看到,通过c.Param(“key”)方法,Gin成功捕获了url请求路径中的参数。同理,gin也可以捕获常规参数,如下代码所示:

       在浏览器输入以下代码:

       通过c.Query(“key”)可以成功接收到url参数,c.DefaultQuery在参数不存在的情况下,会由其默认值代替。

       我们还可以为Gin定义一些默认路由:

       这时候,dubbo心跳源码我们访问一个不存在的页面:

       返回如下所示:

       下面我们测试在Gin里面使用Post

       在测试端输入:

       附带发送的数据,测试即可。记住需要使用POST方法.

       继续修改,将PostHandler的函数修改如下

       测试工具输入:

       发送的内容输入:

       返回结果如下:

       备注:此处需要指定Content-Type为application/x-www-form-urlencoded,否则识别不出来。

       一定要选择对应的PUT或者DELETE方法。

       Gin框架快速的创建路由

       能够方便的创建分组

       支持url正则表达式

       支持参数查找(c.Paramc.Queryc.PostForm)

       请求方法精准匹配

       支持处理

       快速的返回给客户端数据,常用的c.Stringc.JSONc.Data

MFC编程 -- 高级列表框添加数据

       一、设计界面

       在MFC编程中,首先设计界面,添加按钮、编辑框以及高级列表框,为接下来的程序设计打下基础。

       二、高级列表框的视图属性设置

       接着,针对高级列表框,将其视图属性调整为Report模式。同时,修改其他控件的cdhd指标源码名称,以符合程序的逻辑需求。

       三、初始化列表列名

       初始化阶段,需设置列表的列名,明确显示数据的分类和格式。

       四、双击添加按钮,添加代码

       双击添加按钮,编写相应的代码,实现数据的添加功能。确保代码逻辑清晰,易于理解。

       五、运行效果

       运行程序后,高级列表框将显示已添加的数据,用户可以根据需求进行查看和管理。

       六、项目下载

       如需获取完整的项目源代码,可关注编程有你公众号,ghost远程源码后台回复“”获取资源。

AI与PDE(七):AFNO模型的源代码解析

       本文旨在解析AFNO模型的源代码,帮助读者理解模型细节与主干结构。首先,AFNO模型的主干框架在afnonet.py文件中定义,通过类AFNONet实现。模型的核心功能封装在多个类与函数中,依据代码注释逐步解析。

       在代码中,forward_features函数负责模型的核心逻辑,包括patch切割与mixing过程。这些操作由PatchEmbed类实现。位置编码self.pos_embed通过高斯初始化得到,增加模型的表示能力。

       关键模块AFNO2d位于代码中,它基于FNO的原理,负责处理输入数据。AFNO2d模块在forward_features函数中通过循环调用,实现数据的转换与混合。

       经过数个L layer处理后,模型进入类似解码器的结构,用于将中间结果映射为目标结果。这一过程通过self.head(x)实现,以解决特定分类问题。

       本文通过梳理代码流程与结构图,直观展示了AFNO模型的工作原理。读者可参考AFNO的GitHub源代码与论文,深入理解细节。后续文章将继续探讨基于AFNO模型框架的其他应用,如FourCastNet。

swin transformer理解要点

        这是跑通的分类以及分割源码介绍,大家有需要可以参考一下:

        1、 Swin-Transformer分类源码(已跑通)

        2、 Swin-Transformer分割源码(已跑通)

        3、 Swin-Unet(分割改编)

        我们假设图片的大小是×的,窗口大小是固定的,7×7。这里每个方框都是一个窗口,每个窗口是固定有7×7个patch,但是patch的大小是不固定的,它会随着patch merging的操作而发生变化。比如我们看这儿,patch大小是4×4的,那怎么变成8×8呢?我们把周边4个窗口的patch拼在一起,相当于patch扩大了2×2倍,从而得到8×8大小的patch。

        我们发现经过这一系列的操作之后,patch的数目在变少,最后整张图只有一个窗口,7个patch。所以我们可以认为降采样是指让patch的数量减少,但是patch的大小在变大。

        这便是对ViT的一个改进,ViT从头至尾都是对全局做self-attention,而swin-transformer是一个窗口在放大的过程,然后self-attention的计算是以窗口为单位去计算的,这样相当于引入了局部聚合的信息,和CNN的卷积过程很相似,就像是CNN的步长和卷积核大小一样,这样就做到了窗口的不重合,区别在于CNN在每个窗口做的是卷积的计算,每个窗口最后得到一个值,这个值代表着这个窗口的特征。而swin transformer在每个窗口做的是self-attention的计算,得到的是一个更新过的窗口,然后通过patch merging的操作,把窗口做了个合并,再继续对这个合并后的窗口做self-attention的计算。

        其实这边困扰了我一小下,因为我们印象中降采样都是像CNN一样,会变小,但是swin transformer没有给我们变小的感觉。其实这就是感受野没理解到位的问题,CNN到最后,设计适当,最后一个特征图的感受野是可以放大到整张图的,swin transformer最后一个stage也是一个窗口涵盖了整张图。

        Swin-transformer是怎么把复杂度降低的呢? Swin Transformer Block这个模块和普通的transformer的区别就在于W-MSA,而它就是降低复杂度计算的大功臣。

        关于复杂度的计算,我简单的给大家介绍一下,首先是transformer本身基于全局的复杂度计算,这一块儿讲起来有点复杂,感兴趣的同学我们可以会后一起探讨推导过程。在这里,我们假设已知MSA的复杂度是图像大小的平方,根据MSA的复杂度,我们可以得出A的复杂度是(3×3)²ï¼Œæœ€åŽå¤æ‚度是。Swin transformer是在每个local windows(红色部分)计算self-attention,根据MSA的复杂度我们可以得出每个红色窗口的复杂度是1×1的平方,也就是1的四次方。然后9个窗口,这些窗口的复杂度加和,最后B的复杂度为9。

        W-MSA虽然降低了计算复杂度,但是不重合的window之间缺乏信息交流,所以想要窗口之间的信息有所交流,那么就可以把左图演化成右图这样,但是这就产生了一个问题,如此操作,会产生更多的windows,并且其中一部分window小于普通的window,比如4个window -> 9个window,windows数量增加了一倍多。这计算量又上来了。因此我们有两个目的,Windows数量不能多,window之间信息得有交流。

        我们看到,原来的图被划分了9个窗口,中间的区域A就是信息交流的证明。我们先把左上部分(蓝色以外的窗口)移动到右下,然后再用切分四块的方法去切这个图片,这时候区域A就被隔出来了,达到了我们想要的效果。

        transformer的出现并不是为了替代CNN。因为transformer有着CNN没有的功能性,它不仅可以提取特征,还可以做很多CNN做不到的事情,比如多模态融合。而swin transformer就是一个趋势,将CNN与transformer各自的优势有效的结合了起来。这是暂时对它的一些细节补充。最近听说MLP出来了,还没有细看,时代进展未免也太快了,手里针对ViT改进的文章还没投出去,就已经开始要立不住脚了。

        希望可以帮助到大家,如果你觉得这篇文章对你有一定的帮助,那就点个赞支持一下吧!如果有什么问题的话也可以在文章下面评论,我们一起交流解决问题!

        以下是我所有文章的目录,大家如果感兴趣,也可以前往查看

        👉戳右边: 打开它,也许会看到很多对你有帮助的文章

UE4源码剖析——Actor蓝图之CDO与SCS

       在UE的日常使用中,蓝图(UBlueprint)是我们接触最多的资产类型。每个蓝图在创建时需要选择一个父类,这决定了蓝图的类型,比如Actor蓝图、Component蓝图、Widget蓝图、动作蓝图等。以Actor蓝图为例,本文将深入探讨蓝图的基础架构,并学习如何通过代码读取蓝图资产在蓝图编辑器中的属性值。此外,本文还将重点介绍如何利用SCS框架管理新组件,并在运行时加载这些组件。

       在实际开发中,我们经常需要对蓝图进行处理,例如在大型项目中,制定一套资源规范并开发一套资源检测工具。这些工具往往需要遍历特定目录下的蓝图并执行某些条件判断和处理。本文将帮助大家了解如何实现这些功能。

       **实战需求**:

       1. **例1**:要求所有放置在“Buildings”文件夹下的蓝图必须包含`StaticMeshComponent`组件,且`StaticMesh`字段不能为空。

       2. **例2**:要求“Cars”文件夹下的所有蓝图的`SceneComponent`组件移动性必需为`Movable`。

       **蓝图的父类与Actor蓝图**:

       1. **蓝图的父类**:创建蓝图时,编辑器面板中选择的父类决定蓝图的类型,例如`TestActorChild2`的父类为`TestActorChild1`,而`TestActorChild1`的父类为`TestBlueprintActor`。

       2. **Actor蓝图**:若蓝图的父类层级链最顶层是`Actor 类`,则该蓝图为`Actor蓝图`。

       **蓝图产生类**:蓝图的`_C`后缀代表蓝图产生类,它用于在编译时生成C++类,包含蓝图中的信息。

       **蓝图类(UBlueprint)**:加载蓝图包时,通过`LoadObject`函数获取到的是`UBlueprint`类。

       **蓝图骨骼类(SkeletonGeneratedClass)**:以`SKEL_`前缀和`_C`后缀加载,表示蓝图的基础信息,通常在编辑器中修改时会重新生成。

       **蓝图产生类(GeneratedClass)**:仅以`_C`为后缀加载,用于在运行时创建蓝图对象。

       **前后缀声明**:`UBlueprint.h`中的`GetBlueprintClassNames`函数定义了这些前缀。

       **Actor蓝图产生类的实例化与阶段拆分**:

       1. **CDO的构建**:`ClassDefaultObject`是每个类的默认对象,用于提供默认属性值和行为。

       2. **SCS组件附加**:通过蓝图编辑器的组件面板添加组件,这些组件存储在`SimpleConstructionScript`中,用于在运行时添加组件。

       **CDO与SCS**:

       - **CDO**:存储默认属性值与行为,节省数据传输和存储,支持配置化。

       - **SCS**:简化组件添加过程,通过蓝图编辑器直观操作组件。

       **需求回顾与实现**:通过遍历CDO和SCS,判断组件属性值,实现特定条件的检测,如`StaticMeshComponent`的`StaticMesh`字段是否为空。

       本文从实际需求出发,全面介绍了蓝图的基本概念、内部分类、构建流程以及如何利用SCS管理组件。希望本文内容能帮助开发者更深入地理解蓝图的工作原理,提高资源管理与组件处理的效率。

如何改变框架网页标题

       1、使用代码视图,在框架控制面板中选择一个框架,单击代码视图,在源代码页面头部的之间设置框架集的标题。

       2、使用菜单,在框架控制面板上选择一个框架,点击修改菜单,选择页面属性项,打开页面属性对话框,在左侧的分类栏下面,选择标题,编码项,在右侧的标题,编码栏下面的标题框中填写标题内容,设置好标题后,单击,确定按钮即可。

       3、在框架源代码头部之间找到设置标题的代码行,输入想要设的标题。