Hallo Liebe Python Community,
im Rahmen eines Programmiervorhabens bin ich auf ein Hindernis gestoßen, dass ich mit eurer Hilfe lösen möchte.
Ich generiere als erstes mit Hilfe eine PT1 Funktion den input Datensatz. Der generierte Datensatz enthält Insgesamt 50 float Daten. Die ersten 30 sollen zum Training des neuronalen Netzes verwendet werden. Anschließend sollen die letzten 20 Daten von 30 bis 50 mithilfe der Prediction Funktion vorhergesagt werden, was zur Zeit nicht funktioniert. Die Fehlermeldung habe ich unten eingeblendet.
Der Programmcode sieht folgendermaßen aus:
# Vanilla PT1 LSTM
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
#################PT1 Datensatz###############
K=2
T=1
t=np.linspace(0,50)
a=K*(1-np.expm1(-t/T))
Zeitschiene = a.tolist()
plt.plot(t,a,'g')
plt.xlabel('Time')
plt.ylabel('Amplitude')
plt.legend()
plt.show()
#############################################
# split a univariate sequence into samples
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
#raw_seq = [10, 20, 30, 40, 50, 60, 70, 80, 90]
raw_seq = Zeitschiene
# choose a number of time steps
n_steps = 3
# 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(LSTM(50, activation='relu', input_shape=(n_steps, n_features)))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')
# fit model
model.fit(X, y, epochs=200, verbose=0)
# demonstrate prediction
for item in Zeitschiene[27:29]:
x_input = array([Zeitschiene[int(item)]])
x_input = x_input.reshape((1, n_steps, n_features))
for i in Zeitschiene[30:]:
yhat = model.predict(
x_input, batch_size=None, verbose=0, steps=None, callbacks=None, max_queue_size=10,
workers=1, use_multiprocessing=False)
#print(yhat)
plt.xlabel('Time')
plt.ylabel('Amplitude')
plt.legend()
plt.show(t,yhat,'r')
Die Fehlermeldung sieht folgendermaßen aus:
ValueError: cannot reshape array of size 1 into shape (1,3,1)
Meine Vermutung liegt nahe das der Fehler sich in dieser Umgebung befindet, nur kann ich in eine for Schleife keine drei Zahlen aufeinmal weitergeben. Vielleicht hat jemand von euch eine bessere Idee....