C#实现的bp神经网络并应用于综合评价

由于课程设计选的题目是基于神经网络的综合评价,利用暑假时间用C#实现的bp神经网络。其中用到的_Matrix类是C#实现的矩阵类http://blog.csdn.net/lanqiuchaoren/article/details/37738665。此bp神经网络包含1个隐藏层,其中输入层,隐藏层,输出层个数都可以根据需要更改。

具体bp神经网络代码如下

BP类:

using Matrix_Mul;
using Excel = Microsoft.Office.Interop.Excel;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Office.Interop.Excel;



namespace BPNETSerial
{
    public class BP
    {

        /// <summary>
        /// 判断是否训练过网络
        /// </summary>
        Boolean IsTrained;
        /// <summary>
        /// 用于矩阵的相关计算
        /// </summary>
        _Matrix_Calc matrix_Calc;

        /// <summary>
        /// 输入层节点数
        /// </summary>
        int innum;

        /// <summary>
        /// 测试数据组数
        /// </summary>
        int train_num;
        /// <summary>
        /// 训练数据组数
        /// </summary>

        int test_num;
        public int Test_num
        {
            get
            {
                return test_num;
            }
            set
            {
                test_num = value;
            }
        }
        /// <summary>
        /// 测试数据维度;
        /// </summary>
        int sampdim;

        /// <summary>
        /// 隐藏层节点数
        /// </summary>
        int midnum;

        /// <summary>
        /// 输出层节点数
        /// </summary>
        int outnum;

        /// <summary>
        /// 迭代次数
        /// </summary>
        int iteration;

        /// <summary>
        /// 输入层与隐藏层间的权值
        /// </summary>
        _Matrix w1;

        /// <summary>
        /// 输入层与隐藏层间的阀值
        /// </summary>
        _Matrix b1;

        /// <summary>
        /// 输出层与隐藏层间的权值
        /// </summary>
        _Matrix w2;

        /// <summary>
        /// 输出层与隐藏层间的阀值
        /// </summary>
        _Matrix b2;

        /// <summary>
        /// 保存w1的值
        /// </summary>
        _Matrix w1_1;

        /// <summary>
        /// 保存w2的值
        /// </summary>
        _Matrix w2_1;

        /// <summary>
        /// 用于综合评价的矩阵(基于bp神经网络测试结果)
        /// </summary>
        _Matrix comprehesiveEvaluationMatrix;
        /// <summary>
        /// 综合评价结果输出矩阵(基于bp神经网络测试结果)
        /// </summary>
        _Matrix comprehensiveEvaluationResultMatrix;
        /// <summary>
        /// 保存b1的值
        /// </summary>
        _Matrix b1_1;

        /// <summary>
        /// 保存b2的值
        /// </summary>
        _Matrix b2_1;

        /// <summary>
        /// 学习率
        /// </summary>
        double xite;

        /// <summary>
        /// 误差
        /// </summary>
        double error;

         public double[] comprehensiveEvaluation;

        double accu_average;
        /// <summary>
        /// 误差率
        /// </summary>
        double[] accuracy;
        /// <summary>
        /// 训练输入数据
        /// </summary>
        _Matrix input_train;

        public _Matrix Input_train
        {
            get
            {
                return input_train;
            }
            set
            {
                this.input_train = value;
            }
        }
        /// <summary>
        /// 训练输出数据
        /// </summary>
        _Matrix output_train;

        public _Matrix Output_train
        {
            get
            {
                return output_train;
            }
            set
            {
                this.output_train = value;
            }
        }
        /// <summary>
        /// 归一化后的训练输入数据
        /// </summary>
        _Matrix input_train_Norm;

        /// <summary>
        /// 归一化后的训练输出数据
        /// </summary>
        _Matrix output_train_Norm;

        /// <summary>
        /// 测试输入数据
        /// </summary>
        _Matrix input_test;

        public _Matrix Input_test
        {
            get
            {
                return input_test;
            }
            set
            {
                this.input_test = value;
            }
        }

        /// <summary>
        /// 预期输出数据(归一化前)
        /// </summary>
        public _Matrix fore_test;

        /// <summary>
        /// 预期输出数据(归一化后)
        /// </summary>
        public _Matrix fore;

        /// <summary>
        /// 测试输出数据
        /// </summary>
        _Matrix output_test;

        public _Matrix Output_test
        {
            get
            {
                return output_test;
            }
            set
            {
                this.output_test = value;
            }
        }

        /// <summary>
        /// 误差矩阵
        /// </summary>
        _Matrix error_test;

        /// <summary>
        /// 归一化后的测试输入数据
        /// </summary>
        _Matrix input_test_Norm;

        /// <summary>
        /// 归一化后的测试输出数据
        /// </summary>
        _Matrix output_test_Norm;

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="innum"></param>
        /// <param name="midnum"></param>
        /// <param name="outnum"></param>
        /// <param name="num"></param>
        /// <param name="sampDim"></param>
        /// <param name="input_train"></param>
        /// <param name="output_train"></param>
        /// <param name="xite"></param>
        public BP(int innum, int midnum, int outnum, int train_num, int sampDim, int iteration, double xite)
        {
            this.innum = innum;
            this.midnum = midnum;
            this.outnum = outnum;
            this.iteration = iteration;
            matrix_Calc = ne
  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用C#编写BP神经网络可以借助一些开源的计算图框架,例如引用中提到的计算图框架。这些框架提供了丰富的功能和示例,可以帮助我们快速构建和训练BP神经网络。 以下是一个使用C#编写BP神经网络的简单示例: ```csharp using System; using Accord.Neuro; using Accord.Neuro.Learning; class Program { static void Main() { // 创建一个BP神经网络 ActivationNetwork network = new ActivationNetwork( new SigmoidFunction(), // 激活函数 2, // 输入层神经元数量 2, // 隐藏层神经元数量 1 // 输出层神经元数量 ); // 创建训练数据 double[][] inputs = { new double[] { 0, 0 }, new double[] { 0, 1 }, new double[] { 1, 0 }, new double[] { 1, 1 } }; double[][] outputs = { new double[] { 0 }, new double[] { 1 }, new double[] { 1 }, new double[] { 0 } }; // 创建BP神经网络的学习算法 BackPropagationLearning teacher = new BackPropagationLearning(network); // 训练神经网络 double error = 1; int epoch = 0; while (error > 0.001 && epoch < 10000) { error = teacher.RunEpoch(inputs, outputs); epoch++; } // 使用训练好的神经网络进行预测 double[] input = { 0, 1 }; double[] output = network.Compute(input); Console.WriteLine("Input: {0}, Output: {1}", string.Join(", ", input), output[0]); } } ``` 这个示例使用Accord.NET库中的`ActivationNetwork`类和`BackPropagationLearning`类来构建和训练BP神经网络。首先,我们创建了一个具有2个输入神经元、2个隐藏神经元和1个输出神经元的神经网络。然后,我们定义了训练数据,包括输入和期望输出。接下来,我们创建了一个`BackPropagationLearning`对象,它将用于训练神经网络。在训练过程中,我们使用`RunEpoch`方法迭代训练数据,直到达到指定的误差或迭代次数。最后,我们使用训练好的神经网络对新的输入进行预测,并输出结果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值