2017-07-03 5 views
3

Ich folge this blog und ich habe Probleme beim Speichern von Checkpoints, wie es in verlinkten Blog verwendet wird. Bei Zeile 23 wurde verwendet:Keras speichern Checkpoints

filepath="weights-improvement-{epoch:02d}-{val_acc:.2f}.hdf5". So

Ich habe versucht, den Code ein wenig zu zwicken dynamischer zu sein:

filepath = '{0}/checkpoints/checkpoint-{epoch:02d}-{val_loss:.2f}.hdf5'.format(directory).

Wo ich alle Checkpoints gegebenen Architektur in 1 Verzeichnis speichern möchten, z.B .: ./architecture1/checkpoints/

Aber ich erhalte den folgenden Fehler: KeyError: 'epoch'. Was mache ich hier falsch?

S.S .: filepath = "./checkpoints/checkpoint-{epoch:02d}-{val_loss:.2f}.hdf5" funktioniert, aber es speichert alle Checkpoints in 1 Verzeichnis, das ich nicht will.

+0

haben Sie import os versuchen; filepath = os.path.join (Verzeichnis, 'Checkpoints', 'Checkpoint- {Epoche: 02d} - {val_loss: .2f} .hdf5')? –

+0

Wie weisen Sie einem Modell ein Verzeichnis zu? –

+0

Eigentlich habe ich gerade herausgefunden, dass dieses Problem mit einer einfachen String-Verkettung behoben werden kann. – narn

Antwort

1

Wenn Sie format verwenden möchten, ist der richtige Weg, um die Brackets so zu entkommen:

filepath = '{0}/checkpoints/checkpoint-{{epoch:02d}}-{{val_loss:.2f}}.hdf5'.format(directory) 

Also, wenn directory = 'weights', filepath'weights/checkpoints/checkpoint-{epoch:02d}-{val_loss:.2f}.hdf5' wäre.

(Achten Sie darauf, wenn directory enthält {})

+0

Das funktioniert perfekt. Danke vielmals. – narn

+0

@narn Ich postete das als meine zweite Lösung, Sie sagten, dass es nicht funktioniert:/ – bluesummers

+0

@bluesummers nicht wahr. Ihre zweite Lösung war etwa so: 'filepath = '{dir}/checkpoints/checkpoint - {{Epoche: 02d}} - {{val_loss: .2f}}. Hdf5'.format (dir =' Verzeichnis ')' was hat nicht funktioniert. Während Francisco's Lösung Klammern zu entkommen ist. – narn

-1

Ich fand heraus, dass normale String-Verkettung funktioniert. Bedeutung dies funktioniert:

filepath = directory + '/checkpoints/checkpoint-{epoch:02d}-{val_loss:.2f}.hdf5'

Ich habe keine Ahnung, warum .format() nicht funktioniert und wenn jemand erarbeiten könnte, würde ich gerne den Grund zu hören.

1

Das Problem ist, dass Sie format auf einem format qualifizierten String sondern liefern nur eine der Tasten verwenden - und das verursacht einen Fehler.

Was Sie tun, ist

"{0} some text here {epoch:02d}".format("text") 

und dass ein Fehler verursacht, weil es für den zweiten Schlüssel aussieht und kann ihn nicht finden.

Wenn Sie Ihren Code wollen dynamisch sein, was ich tun würde, ist:

"{0}".format(directory) + "/checkpoints/checkpoint-{epoch:02d}-{val_loss:.2f}.hdf5" 
+0

Eigentlich funktioniert das zweite Beispiel nicht, es gibt immer noch 'KeyError:' epoch''Fehler. Das erste Beispiel funktioniert jedoch. – narn

+0

wirklich? überraschend, danke für das Feedback, ich werde es bearbeiten – bluesummers