ich habe ein LSTM Netzwerk programmiert. Hierfür habe ich als erstes ein PT1 Glied verwendet, um Zeitreiehndaten zu generieren. Ich habe den Plot in drei Kategorien unterteilt. Der erste Plot sind die Originaldaten. Der zweite Plot sind auch die Originaldaten. Der dritte Plot sind die Originaldaten + die Vorhersage. Bei der Vorhersage fallen die Werte nahe zu null! Ich habe im Programmcode immer wieder geprüft und nach einem Fehler gesucht, bin aber nicht fündig geworden. Vielleicht kann mir jemand von euch helfen.
Code: Alles auswählen
# univariate bidirectional lstm example
import matplotlib.pyplot as plt
import numpy as np
from numpy import array
from keras.models import Sequential
from keras.layers import LSTM
from keras.layers import Dense
from keras.layers import Bidirectional
import numpy
#############################################
mean = 0
std = 0.1
num_samples = 50
samples = numpy.random.normal(mean, std, size=num_samples)
rauschen=samples
#############################################
#################PT1 Datensatz###############
K=2
T=1
t1=np.linspace(0,15)
a=K*(1-np.expm1(-t1/T))
b=a+rauschen
Zeitschiene = b.tolist()
#############################################
# split a univariate sequence
def split_sequence(sequence, n_steps):
X, y = list(), list()
for i in range(len(sequence)):
# find the end of this pattern
end_ix = i + n_steps
# check if we are beyond the sequence
if end_ix > len(sequence)-1:
break
# gather input and output parts of the pattern
seq_x, seq_y = sequence[i:end_ix], sequence[end_ix]
X.append(seq_x)
y.append(seq_y)
return array(X), array(y)
# define input sequence Train
original=Zeitschiene[0:50]
raw_seq = Zeitschiene[0:30]
# choose a number of time steps
n_steps = 3
#define input sequence Prediction
Vorhersagedatensatz=Zeitschiene[31:50]
######################Trainingsdatensatz###############
# split into samples
X, y = split_sequence(raw_seq, n_steps)
# reshape from [samples, timesteps] into [samples, timesteps, features]
n_features = 1
X = X.reshape((X.shape[0], X.shape[1], n_features))
# define model
model = Sequential()
model.add(Bidirectional(LSTM(50, activation='relu'), input_shape=(n_steps, n_features)))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')
# fit model
#Übungsdatensatz
C, d = split_sequence(Vorhersagedatensatz, n_steps)
# reshape from [samples, timesteps] into [samples, timesteps, features]
n_features = 1
C = C.reshape((C.shape[0], C.shape[1], n_features))
z=[]
for i in C:
i = i.reshape((1, n_steps, n_features))
yhat = model.predict(i, batch_size=None, verbose=0, steps=None, callbacks=None, max_queue_size=10,
workers=1, use_multiprocessing=False)
print(yhat)
z.extend(yhat)
fig, (ax1, ax2, ax3) = plt.subplots(3, sharex=True)
fig.suptitle('Bidirektional PT1 LSTM')
ax1.plot(original)
ax2.plot(raw_seq)
ax3.plot(raw_seq+z)