W tej chwili wdrażam powtarzalną sieć neuronową (RNN) o nazwie Echo State Network (ESN) w pythonie dla klasyfikacji szeregów czasowych (TSC).Równanie parametryczne z numpy
Chcę generować trajektorie za pomocą równań parametrycznych, a następnie trenować moją sieć neuronową, aby sklasyfikować te trajektorie, tak jak w tym artykule przez Mickael Hüsken & Peter Stagge, Recurrent Neural Networks for Time Series Classification. Na koniec chcę porównać wydajność mojego ESN i ich RNN.
Mam kłopoty z generowaniem jednej z tych trajektorii.
Oto trzy klasy zgodnie z tym artykułem:
Które powinny generować coś takiego:
wygenerować 50 trajektorie każdej klasy, a to pływak przymocowany do 0,7, beta i t0 są wybierane losowo między 0 a 2 * pi. Trajektoria zawiera 30 punktów, więc czas jest równy (2 * pi)/30.
Oto mój kod, wiem, że to nie jest najbardziej pytoniczny sposób, ale spełnia on zadanie dla pierwszej i trzeciej klasy. Jednak druga klasa jest nadal na podsłuchu :(
import numpy as np
import sys, getopt, random
timestep = 2.0*np.pi/30.0
alpha = 0.7
def class1(t, beta):
return alpha*np.sin(t+beta)*np.abs(np.sin(t)), alpha*np.cos(t+beta)*np.abs(np.sin(t))
def class2(t, beta):
return alpha*np.sin(t/2.0+beta)*np.sin(3.0/2.0*t), alpha*np.cos(t+beta)*np.sin(2.0*t)
def class3(t, beta):
return alpha*np.sin(t+beta)*np.sin(2.0*t), alpha*np.cos(t+beta)*np.sin(2.0*t)
def generate():
clazz = {
'1' : class1,
'2' : class2,
'3' : class3
}
for classID in clazz :
for i in xrange(50):
fd = open("dataset/%s_%s"%(classID, i+1), 'w')
beta = 2*np.pi*np.random.random()
t = 2*np.pi*np.random.random()
for _ in xrange(30):
fd.write("%s %s\n"%clazz[classID](t, beta))
t += timestep
fd.close()
Kiedy trajektorie fabuły drugiej klasy (przy użyciu matplotlib), mam dziwny efekt ... na przykład:
Dziękujemy! Po prostu poprawię swoje równanie zgodnie z twoim postem (dodaję współczynnik 1/2 do t, aby być jak najbliżej pierwotnego eksperymentu) :) – NiziL