Ich versuche mich am Machine Learning. Dort habe ich mir eine Zeitreihe ausgesucht, welche freie Parkplätze in der Stadt angibt. Nach langem ausprobieren habe ich bei Tensorflow ein Skript gefunden, welches unterschiedliche Modelle ausführt, welches mir helfen soll, dass Beste zu finden. Mit den vorgegebenen Daten (Temperaturen) funktioniert dies wunderbar. Ich kann auch die Daten ersetzen und der grösste Teil ausführen. Bei der Vorlage wird die Temperatur vorhergesagt und ich will frei Parkplätze vorhersagen. Somit sollte ich aus meiner Sicht den Code übernehmen können. Leider funktioniert dies nicht und bei einer Methode verabschiedet sich immer der Kernel. Ich habe nicht herausgefunden, warum.
Nachfolgend der Code:
Aufteilen der Test/Trainingsdaten (Zeitreihe):
Code: Alles auswählen
column_indices = {name: i for i, name in enumerate(df.columns)}
n = len(df)
train_df = df[0:int(n*0.7)]
val_df = df[int(n*0.7):int(n*0.9)]
test_df = df[int(n*0.9):]
num_features = df.shape[1]
Code: Alles auswählen
train_mean = train_df.mean()
train_std = train_df.std()
train_df = (train_df - train_mean) / train_std
val_df = (val_df - train_mean) / train_std
test_df = (test_df - train_mean) / train_std
Code: Alles auswählen
class WindowGenerator():
def __init__(self, input_width, label_width, shift,
train_df=train_df, val_df=val_df, test_df=test_df,
label_columns=None):
# Store the raw data.
self.train_df = train_df
self.val_df = val_df
self.test_df = test_df
# Work out the label column indices.
self.label_columns = label_columns
if label_columns is not None:
self.label_columns_indices = {name: i for i, name in
enumerate(label_columns)}
self.column_indices = {name: i for i, name in
enumerate(train_df.columns)}
# Work out the window parameters.
self.input_width = input_width
self.label_width = label_width
self.shift = shift
self.total_window_size = input_width + shift
self.input_slice = slice(0, input_width)
self.input_indices = np.arange(self.total_window_size)[self.input_slice]
self.label_start = self.total_window_size - self.label_width
self.labels_slice = slice(self.label_start, None)
self.label_indices = np.arange(self.total_window_size)[self.labels_slice]
def __repr__(self):
return '\n'.join([
f'Total window size: {self.total_window_size}',
f'Input indices: {self.input_indices}',
f'Label indices: {self.label_indices}',
f'Label column name(s): {self.label_columns}'])
Code: Alles auswählen
w2 = WindowGenerator(input_width=6, label_width=1, shift=1,
label_columns=["pp_free"])
w2
Total window size: 7
Input indices: [0 1 2 3 4 5]
Label indices: [6]
Label column name(s): ['pp_free']
Dieser soll auch sein und ist korrekt.
Erstellen der Methode split_window welche die Daten immer korrekt splitten sollte:
Code: Alles auswählen
def split_window(self, features):
inputs = features[:, self.input_slice, :]
labels = features[:, self.labels_slice, :]
if self.label_columns is not None:
labels = tf.stack(
[labels[:, :, self.column_indices[name]] for name in self.label_columns],
axis=-1)
# Slicing doesn't preserve static shape information, so set the shapes
# manually. This way the `tf.data.Datasets` are easier to inspect.
inputs.set_shape([None, self.input_width, None])
labels.set_shape([None, self.label_width, None])
return inputs, labels
WindowGenerator.split_window = split_window
Code: Alles auswählen
# Stack three slices, the length of the total window.
example_window = tf.stack([np.array(train_df[:w2.total_window_size]),
np.array(train_df[100:100+w2.total_window_size]),
np.array(train_df[200:200+w2.total_window_size])])
example_inputs, example_labels = w2.split_window(example_window)
print('All shapes are: (batch, time, features)')
print(f'Window shape: {example_window.shape}')
print(f'Inputs shape: {example_inputs.shape}')
print(f'Labels shape: {example_labels.shape}')
Canceled future for execute_request message before replies were done
The Kernel crashed while executing code in the the current cell or a previous cell. Please review the code in the cell(s) to identify a possible cause of the failure. Click here for more info. View Jupyter log for further details.
Der Output sollte aber sein:
All shapes are: (batch, time, features)
Window shape: (3, 7, 19)
Inputs shape: (3, 6, 19)
Labels shape: (3, 1, 1)
Mir ist dies ein Rätsel, warum es nicht funktionieren sollte. Ich hoffe, hier kann mir jemand helfen.
Link zum Jupyter Notebook von Tensorflow: https://www.tensorflow.org/tutorials/st ... ime_series
Vielen Dank und Grüsse