一款 C# 編寫的神經網路計算圖框架

小码编匠發表於2024-11-11

前言

深度學習技術的不斷髮展,神經網路在各個領域得到了廣泛應用。為了滿足 .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網路執行圖

一款 C# 編寫的神經網路計算圖框架

CNN網路95%識別成功率

一款 C# 編寫的神經網路計算圖框架

lstm網路預測PM2.5空氣質量

一款 C# 編寫的神經網路計算圖框架

專案地址

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

最後

如果你覺得這篇文章對你有幫助,不妨點個贊支援一下!你的支援是我繼續分享知識的動力。如果有任何疑問或需要進一步的幫助,歡迎隨時留言。

也可以加入微信公眾號[DotNet技術匠] 社群,與其他熱愛技術的同行一起交流心得,共同成長!優秀是一種習慣,歡迎大家留言學習!

相關文章