CeNiN

2025-12-11 0 703

CeNiN

c e n i n (土耳其语中的“胎儿”是最小的,是纯C#中深c倒转n eural n etworks的馈送阶段的最低实现。它不需要任何第三方库,可以在.NET支持的所有编程语言中使用

如果您在工作中使用它,则可以引用下面的论文:

Atasoy,H。&Kutlu,Y。(2025)。 CNNFET:卷积神经网络功能提取工具。 SoftwareX,30,102088。https://doi.org/10.1016/j.softx.2025.102088

有两个示例说明了如何在C#和VB.NET中使用CeNiN 。您可以在这里找到另一个( Imagetagger )。

您还可以查看CNNFET-卷积神经网络功能提取工具,该应用程序是利用CeNiN使用CNN从图像中提取功能的应用程序。

预验证的模型

您可以下载两种验证的CeNiN型号。这些实际上是牛津视觉几何组的两个VGG模型。这些模型的参数存储在“ CeNiN ”文件中,这些文件允许在.NET框架下快速将数百万参数加载到内存中。

  • Imagenet-MatConvnet-VGG-F。 CeNiN (19层,60824256重量,232MB)
  • Imagenet-vgg-very-deep-16。 CeNiN (37层,138344128重量,528MB)

表现

最耗时的层是卷积层。其他层足够快,没有额外的优化。
以下是从ImageNet-MatConvnet-VGG-F中传递图像的时间。 CeNiN上的Intel Core i7-6500U 2.50GHz CPU和8GB RAM:
conv_1 7548 ms-第一个也是最简单的实现
Conv_2 6763 MS-我使用了Nvidia论文中解释的方法(不,不使用GPU:D)。由于我在张量类中使用的索引方法,它的速度并不比第一个快得多。
conv_3 1975 ms-与conv_2相同,但是这次在索引时使用非重复乘法。
CONS 1031 MS-此和Conv_3之间的唯一区别是并行化。这仅比多核CPU上的conv_3快。更快的广义矩阵乘法方法可以使其更快…
conv (usecblas = true): 151毫秒 – 带有blas支持

英特尔MKL支持(26/05/2019)

从0.2版开始, CeNiN支持使用Intel MKL库来加快矩阵乘法,如果以下文件与CeNiN .dll相同的文件夹中可用:

  • mkl_rt.dll
  • mkl_intel_thread.dll
  • mkl_core.dll
  • libiomp5md.dll
  • mkl_def.dll
  • mkl_avx.dll
  • mkl_avx2.dll
  • mkl_avx512.dll
  • mkl_mc.dll
  • mkl_mc3.dll

这些文件可以在“?:\\ program文件(x86)\\ intelswtools \\ compilers_and_libraries_2019.3.203 \\ Windows \\ redist \\ redist \\ intel64_win \\ mkl”中,从此链接中安装了Intel®MathKernel库后。

OpenBlas支持(12/05/2020)

从0.3版开始, CeNiN支持使用OpenBlas库来加快矩阵乘法,如果以下文件与CeNiN .Dll相同的文件夹中可用:

  • OpenBlas.dll
  • libquadmath-0.dll
  • libgfortran-3.dll
  • libgcc_s_seh-1.dll

预编译的OpenBlas库及其依赖项可以在此处找到。将DLL提取到与CeNiN .dll相同的文件夹中使用它们。

训练自己的模型

由于尚未实现反向传播,因此您无法使用此库训练模型。但是,如果您有训练有素的模型或想用另一个工具(例如Matconvnet)训练模型,则可以轻松地将训练有素的模型转换为CeNiN文件。 CeNiN文件结构如下所示。但是有一些局限性,因为该实施尽可能最小。 (实施层:卷积,池(仅最大池),relu,softmax)

实施新层类型

您可以实现新图层类型继承图层类。在所有层类型中,层的结构很简单,并且相同。新类型需要以下三个实现:

  • 一个构造函数,该构造函数(如果需要)(如果需要)填充和/或步幅参数)
  • 如果输入和输出张量的尺寸不同,则实现setOutputDims()函数。如果它们相同,则此功能在图层类中具有默认的插入。
  • 实现FeedNext()函数。此函数应以呼叫访问tensormeMalloc()的呼叫开始,并以呼叫disposeInputTensor()结尾。

请注意,任何一层都没有输出张量定义。每一层的输入用作上一层的输出。

还请注意,需要填充的张量在填充之前会填充它们,以防止克隆记忆区域引起的性能降低。因此,应首选WriteNextLayerInput()写当前层的输出,尤其是在下一层的左或顶填充值不为零的情况下。这是唯一在将数据写入下一层的输入张量时负责填充的唯一功能…

此外,您可以找到一些在实现新层类型时可能有用的功能和操作器定义,在Tensor.cs中:

  • 张量重塑,
  • 张量 *张量(仅适用于等级-2张量;广义矩阵乘法),,
  • 张量 *浮动,
  • 张量 +张量,张量 – 张量,
  • 张量 +浮子,张量 – 浮子
  • 广播的添加(仅适用于等级-1张量)

。 CeNiN文件格式

此文件格式是结构化的,因此可以在.NET Framework下使用BinaryReader类的读取。该结构如下(新行是用于表示形式, CeNiN文件中没有新行。[]和{}也用于表示数据和类型):

CeNiN NEURAL NETWORK FILE {string without an ending null char}
[LayerCount] {1 x int32}
[InputSize] {3 x int32}
[AveragePixel] {3 x float}
For each layer in network:
[LayerTypeStringLength] {1 x byte (7-bit encoded int)}
[LayerType] {string}
[LayerParams] {different numbers of parameters in different orders, please see CNN() constructor in CNN.cs}
EOF {string without an ending null char}\”>

 CeNiN NEURAL NETWORK FILE   {string without an ending null char}
[LayerCount]                {1 x int32}
[InputSize]                 {3 x int32}
[AveragePixel]              {3 x float}
For each layer in network:
[LayerTypeStringLength]     {1 x byte (7-bit encoded int)}
[LayerType]                 {string}
[LayerParams]               {different numbers of parameters in different orders, please see CNN() constructor in CNN.cs}
EOF                         {string without an ending null char}

VGG2 CeNiN

在/src/Converter(14/05/2019)下,添加了将VGG格式转换为CeNiN格式的MATLAB函数(VGG2 CeNiN )。

链接

  • 提出更快卷积方法的论文( Conv_2Conv_3Conv中):
    https://**ar*xiv.org/abs/1410.0759
  • 预审计的模型(用于矩形):
    http://www.vl*fe**at.org/matconvnet/pretrataining/
  • 视觉几何组(VGG)
    http://www.robots.**o*x.ac.uk/~vgg/
  • 我在Inputlayer中使用的方法快速读取位图[在土耳其语]:
    http://www.a*tas*oy*web.net/bitmapleri-net-catisi-altinda-hizlica-isleme
  • 我有关此图书馆的博客文章[土耳其语]:
    http://www.a*tas*oy*web.net/cenin-konvolusyonel-yapay-sinir-agi-kutuphanesi
  • 我关于Blas [土耳其语]的博客文章:
    http://www.ataso*yw*e*b.net/matlab-in-sihirli-degnegi-blas

下载源码

通过命令行克隆项目:

git clone https://github.com/atasoyhus/CeNiN.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 编程相关 CeNiN https://www.zuozi.net/33909.html

crow
上一篇: crow
engine
下一篇: engine
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务