singleneuron_sinosc.py

来自「一个人工神经网络的程序。 文档等说明参见http://aureservoir.」· Python 代码 · 共 76 行

PY
76
字号
############################################################ 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 + =
减小字号Ctrl + -
显示快捷键?