2016-12-05 4 views
0

Ich möchte ein Netzwerk aufbauen, das für eine gegebene Eingabe die Stunde des Tages voraussagt. Das Ergebnis sollte im Bereich von 0 bis 24 liegen.Zyklischer Verlust im Tensorfluss

Ich habe versucht, es als ein Klassifikationsproblem zu lösen, aber das scheint nicht der richtige Weg zu sein. Mein Problem ist, dass ich nicht weiß, wie man eine zyklische Verlustfunktion erstellt. In meinem Fall zum Beispiel, wenn das Netzwerk eine Ausgabe von 1 erhält und die wahre Bezeichnung 23 ist, möchte ich, dass die Entfernung 2 und nicht 22 ist. Gibt es eine Ebene für die, die ich verwenden kann?

+0

Willkommen bei SO! Das ist eine gute Frage. es hätte nicht abgelehnt werden sollen. Es wird jedoch immer bevorzugt, dass Sie etwas von Ihrer Arbeit zeigen, idealerweise mit einem Code- oder Pseudocode-Snippet. Das wird es weniger wahrscheinlich machen, dass Ihre Frage als fehlende Forschung und Anstrengung missverstanden wird. – Praveen

Antwort

1

Soweit ich weiß, gibt es keine vor geschriebene zyklische Verlustfunktion. Für zyklische Verlust sollten Sie Ihre eigenen Verlustfunktion wie folgt schreiben:

import keras.backend as K 
def cyclic_loss(y_true, y_pred): 
    return K.min((y_pred +24 - y_true) % 24, (y_true + 24 - y_pred) % 24) 

model.compile(optimizer='sgd', loss=cyclic_loss, metrics=['acc']) 

aber es ist kein Klassifikationsproblem ist, wenn Sie Ihren Verlust so definieren. Wenn Sie ein Klassifikationsproblem haben möchten, sollten Sie Ihre Ausgabe mit einer Hotcodierung codieren und Cross-Entropy als Verlustfunktion verwenden. Dann haben Sie eine Wahrscheinlichkeit für jede Stunde des Tages und Sie nehmen die Stunde mit der höchsten Wahrscheinlichkeit.

Als Regressionsaufgabe können Sie die zyklische Verlustfunktion wie oben beschrieben verwenden.

+0

Vielen Dank. Es scheint, dass ich es als Regressionsaufgabe verwenden sollte. Ist es der gleiche Verlust, wenn ich versuche, es in Tensorflow zu schreiben? – GiladD

+0

Wenn Sie Keras als Wrapper ja verwenden. Wenn nicht, müssen Sie das Tensorflow-Backend verwenden. Ich hatte nicht die Gabe, das Tensorflow-Backend direkt zu benutzen, also kann ich es nicht mit Sicherheit sagen. –

+0

ok danke ich werde mit keras arbeiten. gibt es eine Möglichkeit, sicherzustellen, dass die Ausgabe von y_pred in modulo 24 sein wird? Ich setze ein Versprechen, y_pred> 0 (Dicht (1, Aktivierung = 'relu', Name = y_pred) aber wie würde es nicht höher dann 24 gehen Die Verlustfunktion in konkav und nicht konvex – GiladD

Verwandte Themen