使用csharp简单实现的bp神经网络
备注
在此之前最好先安装 Collapsenav.Net.Tool
nuget包
bpnn是反向传播神经网络(Back Propagation Neural Network)算法, 是一种监督式学习的多层前馈神经网络, 可以说是现代神经网络的鼻祖和奠基者, 提出了反向传播算法用于更新连接权重
bp神经网络的结构如上图所示, 包括输入层, 隐藏层和输出层
每个圆形都是一个神经元(Neuron), 每层神经元之间通过突触(Synapse)连接
神经元(Neuron)
一般来说一个神经元的计算需要由以上组成部分参与
其结构用代码表示大概就是下面这样
public class Neuron
{
/// <summary>
/// 神经元本身的输出值
/// </summary>
public double Value { get; set; }
/// <summary>
/// 激活函数
/// </summary>
public ActivationFunction ActivationFunction { get; set; }
/// <summary>
/// 偏置
/// </summary>
public double Bias { get; set; }
/// <summary>
/// 输入连接
/// </summary>
public List<Synapse> Inputs { get; set; }
/// <summary>
/// 输出连接
/// </summary>
public List<Synapse> Outputs { get; set; }
}
Inputs
和 Outputs
分别对应输入输出的突触结构, 输入是与上一层所有神经元的连接, 输出是与下一层所有神经元的连接
突触(Synapse)
然后来看一下突触(Synapse)的结构
突触的结构相比神经元来说就非常简单了, 只有前后两个神经元和这条连接的对应权重, 毕竟突触的作用也就是连接前后两个神经元
public class Synapse
{
/// <summary>
/// 输入端
/// </summary>
public Neuron Input { get; set; }
/// <summary>
/// 输出端
/// </summary>
public Neuron Output { get; set; }
/// <summary>
/// 权重
/// </summary>
public double Weight { get; set; }
}