Ich versuche, eine RNN in Keras mit Sequenzen, die unterschiedliche Zeitlängen haben, zu passen. Meine Daten befinden sich in einem Numpy-Array mit dem Format (sample, time, feature) = (20631, max_time, 24)
. Dabei wird max_time
zur Laufzeit als die Anzahl der verfügbaren Zeitschritte für die Stichprobe mit den meisten Zeitmarken festgelegt. Ich habe den Anfang jeder Zeitreihe mit 0
aufgefüllt, bis auf den längsten natürlich.Keras-Maskierung für RNN mit verschiedenen Zeitschritten
Ich habe definiert zunächst mein Modell wie so ...
model = Sequential()
model.add(Masking(mask_value=0., input_shape=(max_time, 24)))
model.add(LSTM(100, input_dim=24))
model.add(Dense(2))
model.add(Activation(activate))
model.compile(loss=weibull_loglik_discrete, optimizer=RMSprop(lr=.01))
model.fit(train_x, train_y, nb_epoch=100, batch_size=1000, verbose=2, validation_data=(test_x, test_y))
Der Vollständigkeit halber ist hier der Code für den Funktionsverlust:
def weibull_loglik_discrete(y_true, ab_pred, name=None):
y_ = y_true[:, 0]
u_ = y_true[:, 1]
a_ = ab_pred[:, 0]
b_ = ab_pred[:, 1]
hazard0 = k.pow((y_ + 1e-35)/a_, b_)
hazard1 = k.pow((y_ + 1)/a_, b_)
return -1 * k.mean(u_ * k.log(k.exp(hazard1 - hazard0) - 1.0) - hazard1)
Und hier ist der Code für die Funktion individuelle Aktivierung :
def activate(ab):
a = k.exp(ab[:, 0])
b = k.softplus(ab[:, 1])
a = k.reshape(a, (k.shape(a)[0], 1))
b = k.reshape(b, (k.shape(b)[0], 1))
return k.concatenate((a, b), axis=1)
Wenn ich das Modell passen und einige Testvorhersagen machen, jedes Sample im Testset bekommt genau die gleiche Vorhersage, die fischig scheint.
Es wird besser, wenn ich die Maskierungsschicht entferne, was mich denken lässt, dass etwas mit der Maskierungsschicht nicht stimmt, aber soweit ich das beurteilen kann, habe ich die Dokumentation genau befolgt.
Ist etwas mit der Maskierungsschicht falsch spezifiziert? Vermisse ich etwas anderes?
Ich habe ein paar Kommentare: 1. Warum haben Sie eine '1e-35'-Konstante festgelegt, wenn' float32' Genauigkeit tatsächlich '1e-7' ist? –
In Bezug auf meine Prämie, ich möchte nur ein Beispiel für die richtige Verwendung der Maskierungsschicht für Sequenzen unterschiedlicher Länge. Mach dir keine Sorgen über Netzwerk-Besonderheiten. – Seanny123