各位老铁们,大家好,今天由我来为大家分享注册页面网站源码分享,以及注册页面代码html的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!
TNN:由腾讯优图实验室打造,移动端高性能、轻量级推理框架,同时拥有跨平台、高性能、模型压缩、代码裁剪等众多突出优势。TNN框架在原有Rapidnet、ncnn框架的基础上进一步加强了移动端设备的支持以及性能优化,同时也借鉴了业界主流开源框架高性能和良好拓展性的优点。目前TNN已经在手Q、微视、P图等应用中落地,欢迎大家参与协同共建,促进TNN推理框架进一步完善。
腾讯推理引擎TNN
本系列文章为对腾讯TNN的深度源码级别解读,希望通过对一个推理框架的完整描述,来增强读者对于神经网络设计、实现到优化的方方面面。本节将对TNN中的Layer的创建和注册过程做详细的分析介绍。
Tips:TNN中使用了大量的模板工厂方法,读者可以自行阅读该设计模式,以期更好的理解TNN设计中的一些代码风格和模式。
TNN中Layer主要包含声明和注册两个过程。以下代码展示了是一个典型的流程(该代码位于layer/abs_layer.cc文件中)。
namespaceTNN_NS{\n\n//需要在每个层的实现中声明类和注册类。\nDECLARE_ELEMENTWISE_LAYER(Abs,LAYER_ABS);\n\nREGISTER_ELEMENTWISE_LAYER(Abs,LAYER_ABS);\n}
那么声明和注册的过程到底包含哪些动作呢?下文将逐步展开。
Layer的声明
Layer都是通过宏定义的方式进行声明,包含了Froward,获取输入输出、类型推断,维度推断等一系列涉及到神经网络层常用的功能。通过宏定义可以快速生成Layer的定义。
//基于字符串和,type生成具体类\ndefineREGISTER_LAYER(type_string,layer_type)类实现的。该宏通过创建TypeLayerRegister实例的方式将type和TypeCreator建立映射关系。
#_register(layer_type);
TypeLayerRegister其实就是简单的通过构造函数进行map元素插入,其通过模板类指定TypeLayerCreator。
template<typenameT>\nclassTypeLayerRegister{\npublic:\nexplicitTypeLayerRegister(LayerTypetype){\nGetGlobalLayerCreatorMap()[type]=shared_ptr<T>(newT(type));\n}\n};
类型和创建器的映射的creators(map结构)实现为static的静态成员,并且在第一次调用的时候被创建。
std::map<LayerType,std::shared_ptr<LayerCreator>>&GetGlobalLayerCreatorMap(){\n//staticshared_ptrofLayerCreatorMap.\nstaticstd::once_flagonce;\n//定义creators维护了LayerType到创建器的列表\nstaticstd::shared_ptr<std::map<LayerType,std::shared_ptr<LayerCreator>>>creators;\nstd::call_once(once,[](){creators.reset(newstd::map<LayerType,std::shared_ptr<LayerCreator>>);});\nreturn*creators;\n}
转载声明:
本文为头条号作者深度视野整理发布,任何个人或组织未经授权不得转载。
违规转载将追究法律责任。
OK,关于注册页面网站源码分享和注册页面代码html的内容到此结束了,希望对大家有所帮助。
