📄 singleneuron_sinosc.py
字号:
############################################################ with a delay&sum readout it's possible to train# a sine osc with just one neuron## see " Echo State Networks with Filter Neurons and a# Delay&Sum Readout"# http://grh.mur.at/misc/ESNsWithFilterNeuronsAndDSReadout.pdf## 2008, Georg Holzmann###########################################################import numpy as Nimport pylab as Pimport sys, errorcalcsys.path.append("../")from aureservoir import *############################################################ MAIN# setup netnet = DoubleESN()net.setSize(1)net.setInputs(1)net.setOutputs(1)net.setInitParam(CONNECTIVITY, 1.)net.setInitParam(ALPHA, 0.)net.setInitParam(IN_CONNECTIVITY, 0.)net.setInitParam(IN_SCALE, 0.)net.setInitParam(FB_CONNECTIVITY, 1.)net.setInitParam(FB_SCALE, 1.)net.setInitParam(FB_SHIFT, 0.)net.setReservoirAct(ACT_LINEAR)net.setOutputAct(ACT_LINEAR)net.setInitAlgorithm(INIT_STD)net.setSimAlgorithm(SIM_FILTER_DS)net.setTrainAlgorithm(TRAIN_DS_PI)# you need crosscorrelation method here, GCC won't work:net.setInitParam(DS_USE_CROSSCORR)net.setInitParam(DS_MAXDELAY, 1000)net.init()trainsize = 1000washout = 500testsize = 300# make sinen = N.arange(float(trainsize+testsize))signal = N.sin(2*N.pi*n* 0.05)# generate train/test datatrainout = signal[0:trainsize]trainout.shape = 1, -1trainin = N.zeros(trainout.shape)testout = signal[trainsize:trainsize+testsize]testout.shape = 1, -1testin = N.zeros(testout.shape)# ESN trainingnet.train(trainin, trainout, washout)delays = N.zeros((1,2))net.getDelays(delays)print "output weights:", net.getWout()print "calculated delays:", delays# ESN simulationesnout = N.empty(testout.shape)net.simulate(testin, esnout)print "\nNRMSE: ", errorcalc.nrmse(esnout, testout, 50)# some plottingP.plot(testout.flatten())P.plot(esnout.flatten(), 'r')P.show()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -