实验四 BP神经网络模拟sin函数.doc
文本预览下载声明
实验四 BP神经网络模拟sin函数
问题描述
BP神经网络模拟sin函数
根据人工神经网络学习算法,实现正弦曲线的拟合。要求能随机自动生成数量为n的正弦值作为训练集,并根据训练集拟合曲线,最后能通过输入x值测试理论与拟合sinx的拟合度。
设计思想
思维学普遍认为,人类大脑的思维分为抽象(逻辑)思维、形象(直观)思维和灵感(顿悟)思维三种基本方式。
逻辑性的思维是指根据逻辑规则进行推理的过程;它先将信息化成概念,并用符号表示,然后,根据符号运算按串行模式进行逻辑推理;这一过程可以写成串行的指令,让计算机执行。然而,直观性的思维是将分布式存储的信息综合起来,结果是忽然间产生想法或解决问题的办法。这种思维方式的根本之点在于以下两点:1.信息是通过神经元上的兴奋模式分布储在网络上;2.信息处理是通过神经元之间同时相互作用的动态过程来完成的。
人工神经网络就是模拟人思维的第二种方式。这是一个非线性动力学系统,其特色在于信息的分布式存储和并行协同处理。虽然单个神经元的结构极其简单,功能有限,但大量神经元构成的网络系统所能实现的行为却是极其丰富多彩的。
这些神经元一般分为三种:输入层神经元,隐层神经元和输出层神经元。
输入层:单元i的输入:
单元数量:d
单元i
单元i
隐 层:单元j的输入:
单元数量:
单元j
单元j
输出层:单元k的输入:
单元数量:c
单元k的输出:
单元k
程序设计
编译环境
使用C#语言编写,编译器为VS2008,运行环境为Windows+.NetFramework3.5
程序运行流程
运行程序后,单击“训练”按钮,开始训练,训练完成后可以看到函数图像与各权值,输入x的值可以查看预测值与准确值。
类设计
神经网络类的定义:
class NeuralNetwork
{
#region Instance Fields
//private fields
private int num_in;
private int num_hid;
private int num_out;
private double[,] i_to_h_wts;
private double[,] h_to_o_wts;
private double[] inputs;
private double[] hidden;
private double[] outputs;
private double learningRate = 0.3;
private Random gen = new Random();
#endregion
#region Constructor
/// summary
/// Creates a new NeuralNetwork, using the parameters
/// provided
/// /summary
/// param name=num_inNumber of inputs nodes/param
/// param name=num_hidNumber of hidden nodes/param
/// param name=num_outNumber of output nodes/param
public NeuralNetwork(int num_in, int num_hid, int num_out)
{
this.num_in = num_in;
this.num_hid = num_hid;
this.num_out = num_out;
i_to_h_wts = new double[num_in + 1, num_hid];
h_to_o_wts = new double[num_hid + 1, num_out];
inputs = new double[num_in + 1];
hidden = new double[num_hid + 1];
outputs = new double[num_out];
}
#endr
显示全部