用C#写一个简单的神经网络算法
时间: 2024-03-16 11:44:02 浏览: 19
好的,以下是一个简单的 C# 神经网络算法示例,它使用 Math.NET Numerics 库实现:
```csharp
using MathNet.Numerics.LinearAlgebra;
// 定义神经网络类
public class NeuralNetwork
{
private Matrix<double> weights1;
private Matrix<double> weights2;
public NeuralNetwork(int inputSize, int hiddenSize, int outputSize)
{
// 初始化权重
weights1 = Matrix<double>.Build.Random(inputSize, hiddenSize);
weights2 = Matrix<double>.Build.Random(hiddenSize, outputSize);
}
// 定义 sigmoid 函数
private double Sigmoid(double x)
{
return 1 / (1 + Math.Exp(-x));
}
// 定义前向传播函数
public Matrix<double> Forward(Matrix<double> inputs)
{
var hidden = inputs * weights1;
hidden.MapInplace(Sigmoid);
var output = hidden * weights2;
output.MapInplace(Sigmoid);
return output;
}
}
// 创建一个 2-3-1 的神经网络
var nn = new NeuralNetwork(2, 3, 1);
// 测试前向传播函数
var inputs = Matrix<double>.Build.DenseOfArray(new double[,] { { 0.5, 0.2 } });
var output = nn.Forward(inputs);
Console.WriteLine(output);
```
这个神经网络包含一个输入层、一个隐藏层和一个输出层。输入层有 2 个节点,隐藏层有 3 个节点,输出层有 1 个节点。在初始化时,权重随机初始化。在前向传播函数中,使用 sigmoid 函数作为激活函数,计算输入经过权重后的输出。最后,我们使用一个输入向量进行测试,并输出神经网络的输出结果。
请注意,由于 C# 不支持运算符重载,我们需要使用 Math.NET Numerics 库提供的矩阵乘法和逐元素操作。