📄 slow_sine.py
字号:
############################################################ slow sine genration task with standard and BP ESN## see Jaeger H. (2002), "Tutorial on training recurrent# neural networks, covering BPPT, RTRL, EKF and the# echo state network approach"## 2007, Georg Holzmann###########################################################import numpy as Nimport pylab as Pfrom aureservoir import *import syssys.path.append("../")from aureservoir import *import errorcalc, filteresn############################################################ FUNCTIONSdef setup_STD_ESN(): """ configuration of a standard ESN """ net = DoubleESN() net.setSize(20) net.setInputs(1) net.setOutputs(1) net.setInitParam( CONNECTIVITY, 0.2 ) net.setInitParam( ALPHA, 0.45 ) net.setInitParam( IN_CONNECTIVITY, 0. ) net.setInitParam( IN_SCALE, 0. ) net.setInitParam( FB_CONNECTIVITY, 1. ) net.setInitParam( FB_SCALE, 1. ) net.setReservoirAct( ACT_TANH ) net.setOutputAct( ACT_LINEAR ) net.setSimAlgorithm( SIM_STD ) net.setTrainAlgorithm( TRAIN_PI ) trainnoise = 1e-6 testnoise = 0. return net, trainnoise, testnoisedef setup_ESN_BP(): """ configuration of a bandpass ESN with cutoff frequency at the sine frequency """ net = filteresn.BPESN() net.setSize(20) net.setInputs(1) net.setOutputs(1) net.setInitParam( CONNECTIVITY, 0.2 ) net.setInitParam( ALPHA, 0.3 ) net.setInitParam( IN_CONNECTIVITY, 0. ) net.setInitParam( IN_SCALE, 0. ) net.setInitParam( FB_CONNECTIVITY, 1. ) net.setInitParam( FB_SCALE, 1. ) net.setReservoirAct( ACT_TANH ) net.setOutputAct( ACT_LINEAR ) net.setSimAlgorithm( SIM_BP ) net.setTrainAlgorithm( TRAIN_PI ) net.setConstCutoffs(0.01, 0.01) # sine frequency trainnoise = 0. testnoise = 0. return net, trainnoise, testnoisedef generate_slow_sine(size,ampl=1): """ generates a slow sinewave: y[n] = ampl * sin(n/100) omega = 2*pi*f -> f = 0.0015915494309189536 -> Periode = 628.318 """ x = N.arange( float(size) ) y = ampl*N.sin( x/100 ) return ydef get_esn_data(signal,trainsize,testsize): """ returns trainin, trainout, testin, testout """ trainout = signal[0:trainsize] trainout.shape = 1,-1 trainin = N.zeros(trainout.shape) testout = signal[trainsize:trainsize+testsize] testout.shape = 1,-1 testin = N.zeros(testout.shape) return trainin, trainout, testin, testoutdef plot(esnout,testout): """ plotting """ P.title('Original=blue, ESNout=red') P.plot(testout,'b',esnout,'r') P.show()############################################################ MAINtrainsize = 4000washout = 2000testsize = 8000# choose ESN: compare STD-ESN with BP-ESNnet, trainnoise, testnoise = setup_STD_ESN()#net, trainnoise, testnoise = setup_ESN_BP()net.init()# generate signalsslsine = generate_slow_sine(trainsize+testsize)trainin, trainout, testin, testout = get_esn_data(slsine,trainsize,testsize)# ESN trainingnet.setNoise(trainnoise)net.train(trainin,trainout,washout)print "output weights:"print "\tmean: ", net.getWout().mean(), "\tmax: ", abs(net.getWout()).max()# ESN simulationesnout = N.empty(testout.shape)net.setNoise(testnoise)net.simulate(testin,esnout)print "\nNRMSE: ", errorcalc.nrmse( esnout, testout, 50 )plot(esnout,testout)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -