水文研究与人工神经网络FANN

流域的降雨径流过程是一个复杂、高度非线性的过程,并且存在时间与空间上的多变性。为了模拟降雨径流过程,目前开发了许多模型,可以分为系统模型、概念性模型和物理模型,应用较为成熟的系统模型大多是线性的。这些模型往往不能体现降雨径流过程内在的高度非线性特征。人工神经网络(Artificial Neural Network,简称ANN)技术为降雨径流模拟提供了一种新的方法,并且在实际应用中被证实是水文水资源研究中一个有用的工具。

20世纪90年代以来,许多水文工作者将人工神经网络应用于降雨径流预报中,并在多个流域得到成功应用。

要使用人工神经网络如果从头开始重新编写人工神经网络算法库对一般水文专业人员是比较困难至少是繁杂的工作,因此CnHUP在这里推荐一个开源的神经网络算法库FANN(Fast Artificial Neural NetWork库的简称),FANN具有良好的封装性,使用相当方便,而且提供了很多语言的接口,使用FANN将很大程度减轻重复劳动,从而有利于水文水资源研究工作。

这里给出一个FANN自带的示例代码,这一示例解决的是经典的XOR问题。

/////////////////////////////////
// 人工神经网络算法FANN示例
// http://www.cnhup.com
//
/////////////////////////////////
program XorConsole;
{$APPTYPE CONSOLE}
uses
  SysUtils,fann;
var ann: PFann;
  inputs: array [0..1] of fann_type;
  calc_out: PFann_Type_array;
  i,j: integer;
  train_data: PFann_Train_Data;
begin
    ann:=fann_create_standard(3,2,3,1);
    train_data:=fann_read_train_from_file('xor.data');
    fann_set_activation_steepness_hidden(ann, 0.5);
    fann_set_activation_steepness_output(ann, 0.5);
    fann_set_activation_function_hidden(ann, FANN_SIGMOID);
    fann_set_activation_function_output(ann, FANN_SIGMOID);
    fann_set_train_stop_function(ann, FANN_STOPFUNC_BIT);
    fann_set_bit_fail_limit(ann, 0.001);
    fann_init_weights(ann, train_data);
    fann_train_on_data(ann, train_data, 500000,1000, 0.001);
    for i:=0 to 1 do
      for j:=0 to 1 do
      begin
           inputs[0]:=i;
           inputs[1]:=j;
           calc_out:= fann_run(ann, @inputs[0]);
           writeln(Format('%f Xor %f = %f',[inputs[0],inputs[1],Calc_Out[0]]));
      end;
    readln;
    fann_destroy(ann);
end.


发表评论

You must be logged in to post a comment.