Ich lerne, wie man Keras verwendet, und ich habe mit meinem beschrifteten Datensatz anhand der Beispiele in Chollets Deep Learning für Python vernünftigen Erfolg gehabt . Der Datensatz ist ~ 1000 Zeitreihen mit einer Länge von 3125 mit 3 möglichen Klassen.
Ich möchte über die grundlegenden dichten Schichten hinausgehen, die mir eine Vorhersagerate von etwa 70% geben, und das Buch geht weiter auf LSTM- und RNN-Schichten ein.
Alle Beispiele scheinen Datensätze mit mehreren Funktionen für jede Zeitreihe zu verwenden, und ich habe Schwierigkeiten, herauszufinden, wie ich meine Daten als Ergebnis implementieren kann.
Wenn ich zum Beispiel 1000x3125-Zeitreihen habe, wie kann ich diese in so etwas wie die SimpleRNN- oder LSTM-Ebene einspeisen? Fehlt mir ein grundlegendes Wissen darüber, was diese Schichten tun?
Aktueller Code:
import pandas as pd
import numpy as np
import os
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM, Dropout, SimpleRNN, Embedding, Reshape
from keras.utils import to_categorical
from keras import regularizers
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
def readData():
# Get labels from the labels.txt file
labels = pd.read_csv('labels.txt', header = None)
labels = labels.values
labels = labels-1
print('One Hot Encoding Data...')
labels = to_categorical(labels)
data = pd.read_csv('ts.txt', header = None)
return data, labels
print('Reading data...')
data, labels = readData()
print('Splitting Data')
data_train, data_test, labels_train, labels_test = train_test_split(data, labels)
print('Building Model...')
#Create model
model = Sequential()
## LSTM / RNN goes here ##
model.add(Dense(3, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
print('Training NN...')
history = model.fit(data_train, labels_train, epochs=1000, batch_size=50,
validation_split=0.25,verbose=2)
results = model.evaluate(data_test, labels_test)
predictions = model.predict(data_test)
print(predictions[0].shape)
print(np.sum(predictions[0]))
print(np.argmax(predictions[0]))
print(results)
acc = history.history['acc']
val_acc = history.history['val_acc']
epochs = range(1, len(acc) + 1)
plt.plot(epochs, acc, 'bo', label='Training acc')
plt.plot(epochs, val_acc, 'b', label='Validation acc')
plt.title('Training and Validation Accuracy')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()
plt.show()
quelle
batch_size
das Modell nicht definieren, wird es aus demselben Argument übernommenmodel.fit()
. Sie sollten umformen, um(3025, 100, 1000)
3025 Stapel mit jeweils 100 (Zeilen) Zeitschritten und 1000 (Spalten) Variablen zu erhalten. Die Verwendungnp.reshape
funktioniert hier leider nicht (es wird eine Fehlermeldung angezeigt), da sich die Daten überlappen ... die endgültige Form enthält mehr Daten als die Eingabe. 3025x100x1000> 3125x1000 -np.reshape
mag das nicht, da es mehrdeutig ist. Ich schlage vor, einfach den Datensatz zu durchlaufen, 1 Schleife = 1 Probe.