首页 > 编程语言 >一款 C# 编写的神经网络计算图框架

一款 C# 编写的神经网络计算图框架

时间:2024-11-11 13:42:00浏览次数:3  
标签:ConvLayer Matrix C# 神经网络 ff 编写 cl1 cl2

前言

深度学习技术的不断发展,神经网络在各个领域得到了广泛应用。为了满足 .NET 开发的需求,推荐一款使用 C# 编写的神经网络计算图框架。

框架的使用方法接近 PyTorch,提供了丰富的示例和详细的文档,帮助大家快速上手。

框架介绍

项目完全使用 C# 编写,提供了一个透明的神经网络计算图框架。用户可以查看和理解框架内部的任何实现细节。

框架支持多种网络结构,包括卷积神经网络(CNN)、反向传播网络(BP)、全连接网络(FCN)、长短期记忆网络(LSTM)、卷积长短期记忆网络(ConvLSTM)和门控循环单元网络(GRU)。

每个示例都附带了所需的数据内容,确保用户能够快速上手并进行实验。

使用说明

  • 损失函数支持:MESLOSS、交叉熵损失 (Cross-Entropy)
  • 激活函数支持:ReLU、Tanh、Sigmoid、Softmax
  • 数据类型支持:二维数据 float[][] 和四维数据 float[][][,]
  • 池化支持:平均池化、最大池化
  • 其他支持:卷积层 (ConvLayer)、二维卷积层 (Conv2DLayer)、乘法层 (MulLayer)、转置卷积层 (ConvTranspose2DLayer)

部分代码示例

//声明两个ConvLayer 和一个激活函数SigmodLayer 
ConvLayer cl1 = new ConvLayer(13, 5, true);
          
SigmodLayer sl = new SigmodLayer();
float lr = 0.5f;
ConvLayer cl2 = new ConvLayer(5, 1, true);

int i = 0,a=0;
while (a < 5000)
{
     
        dynamic ff = cl1.Forward(x);
        ff = sl.Forward(ff);
        ff = cl2.Forward(ff);
       
        //计算误差
        MSELoss mloss = new MSELoss();
       
        var loss = mloss.Forward(ff, y);

        Console.WriteLine("误差:" + loss);

        dynamic grid = mloss.Backward();

        //反传播w2
       
        dynamic w22 = cl2.backweight(grid);

        //反传播W1
        dynamic grid1 = cl2.backward(grid);
        grid1 = sl.Backward(grid1);
        dynamic w11 = cl1.backweight(grid1);
           
       //更新参数
        cl2.weights = Matrix.MatrixSub(cl2.weights, Matrix.multiply(w22.grid, lr));
        cl2.basicData = Matrix.MatrixSub(cl2.basicData, Matrix.multiply(w22.basic, lr));

        cl1.weights = Matrix.MatrixSub(cl1.weights, Matrix.multiply(w11.grid, lr));
        cl1.basicData = Matrix.MatrixSub(cl1.basicData, Matrix.multiply(w11.basic, lr));
        i++;
  
    a++;
}

BP网络运行图

CNN网络95%识别成功率

lstm网络预测PM2.5空气质量

项目地址

Gitee:https://gitee.com/UDCS/WeaveAI

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。

也可以加入微信公众号[DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!优秀是一种习惯,欢迎大家留言学习!

标签:ConvLayer,Matrix,C#,神经网络,ff,编写,cl1,cl2
From: https://www.cnblogs.com/1312mn/p/18535893

相关文章

  • 对 Wireshark、SolarWinds、Fiddler、TCPdump、NetworkMiner、Charles、JMeter、Fireb
    对Wireshark、SolarWinds、Fiddler、TCPdump、NetworkMiner、Charles、JMeter、Firebug、HTTPWatch和AntiARPSniffer等网络分析工具的详细对比分析,内容包括功能、特点、适用场景、平台支持等方面。表格总结了它们的主要区别与特点。工具名称功能适用场景平台支持优......
  • 服务器漏洞修复:TLS 1.0 已启用、HSTS、CSP
    1、TLS1.0已启用描述:此Web服务器支持通过TLS1.0加密。TLS1.0不被认为是“强密码术”。根据PCI数据安全标准3.2(.1)的定义和要求,在保护从网站往返的敏感信息时,TLS1.0并不被认为是"强加密"。根据PCI,"2018年6月30日是禁用SSL/早前TLS并实施更安全的加密协......
  • 【题解】CF1993【EF】
    A注意到一种选项最多填对\(n\)个题所以答案是\(\min(n,cnt_a)+\min(n,cnt_b)+\min(n,cnt_c)+\min(n,cnt_d)\)B注意到操作只能让奇数变多,偶数变少,所以我们只能把偶数全变成奇数特判掉全是偶数的情况,容易得到答案下界:偶数个数容易想到一个naive贪心做法:每次都拿出奇数......
  • creator2.4.5 astc问题排除
    最近将creator2.4.5发布web版本, 需要将所有的图片转astc,但是不能无脑转,需求去除预乘alpha的图片。也就是 {"__type__":"cc.Texture2D","content":"0,9729,9729,33071,33071,1,0,1"}这个content.split(",")[5] =='1' 表示是预乘alpha的图片......
  • C++ 数据结构详解
    目录C++数据结构详解引言1.数组(Array)示例代码2.向量(Vector)示例代码3.链表(List)示例代码4.栈(Stack)示例代码5.队列(Queue)示例代码6.集合(Set)示例代码7.映射(Map)示例代码C++数据结构详解引言数据结构是计算机科学中的一个重要概念......
  • 海力士 H9HCNNNBKUMLXR-NEE 在售中 ,Platinum P41 M.2 PCIE 4.0 2TB固态硬盘,Dram颗粒编
    主控:海力士ARIES主控(ACNS8075PMT762.00S-1)闪存:海力士SK4DV7176L(H25T3TCG8CX59),单颗容量为1TB,IO速率为1600MT/s缓存:海力士LPDDR4DDR4-426616Gb,容量为2048MB产品名称:海力士PlatinumP41SSD2TB闪存特写和缓存图片请参考相关资料。海力士PlatinumP41固态硬盘的性......
  • PEF22554HTV3.1 英特尔intel 电信 IC 调帧器,线路接口单元(LIU) P-TQFP-144 在售20000PCS
    PEF22554HTV3.1是一款由英特尔(Intel)生产的电信IC调帧器,它可以与线路接口单元(LIU)一起使用。该调帧器的封装类型是P-TQFP-144。该调帧器适用于电信领域的应用,可以用于实现数据调制和解调功能,常见于传输和接收语音、数据和视频信号的通信设备中。型号:PEF22554HTV3.1类别:集成电路......
  • 【热门主题】000040 探索 ECMAScript:从起源到未来
    前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦......
  • C 语言标准库 - <ctype.h>
    目录        C语言isascii()函数:判断字符是否为ASCII码        C语言isalnum()函数:判断字符是否为字母或数字        C语言isalpha()函数:判断字符是否为英文字母        C语言iscntrl()函数:判断字符是否为控制字符        C......
  • 2024ccpc女生赛题解
    考场上写的A,C,H,L,M下来补一下剩下的E注意\(p[i]<i\)这个性质和重心关系不大,一个简单的构造,手模几个样例就能发现规律。倒着枚举:\(c[i]=0\)的是叶子,不用处理\(c[i]>0\),这个点连到父亲所在连通块的根上即可。并查集维护连通块以及连通块的根,根就是连通块中最小编号的点。#inc......