2017-06-08 6 views
2

Ich möchte meine Verlustwerte während der Trainingszeit überprüfen, damit ich den Verlust bei jeder Iteration beobachten kann. Bisher habe ich keinen einfachen Weg gefunden, um Scikit zu lernen, mir eine Historie von Verlustwerten zu geben, noch habe ich eine Funktionalität gefunden, die bereits innerhalb von Scikit den Verlust für mich darstellt.Python sklearn zeige Verlustwerte während des Trainings

Wenn es keine Möglichkeit gibt, dies zu plotten, wäre es toll, wenn ich einfach die endgültigen Verlustwerte am Ende von classifier.fit abrufen könnte.

Hinweis: Mir ist bewusst, dass einige Lösungen geschlossen sind. Ich benutze mehrere Klassifikatoren, die keine analytischen Lösungen haben, wie logistische Regression und SVM.

Hat jemand irgendwelche Vorschläge?

+0

Können Sie ein bisschen mehr erklären, was Sie genau wollen. –

+0

Ist das nah an dem, was Sie verlangen? http://scikit-learn.org/stable/modules/generated/sklearn.metrics.log_loss.html – MichaelMMeskhi

Antwort

2

So konnte ich nicht sehr gut Dokumentation auf direkt die Verlustwerte pro Iteration zu holen, aber ich hoffe, dass dies jemand in der Zukunft helfen wird:

old_stdout = sys.stdout 
sys.stdout = mystdout = StringIO() 
clf = SGDClassifier(**kwargs, verbose=1) 
clf.fit(X_tr, y_tr) 
sys.stdout = old_stdout 
loss_history = mystdout.getvalue() 
loss_list = [] 
for line in loss_history.split('\n'): 
    if(len(line.split("loss: ")) == 1): 
     continue 
    loss_list.append(float(line.split("loss: ")[-1])) 
plt.figure() 
plt.plot(np.arange(len(loss_list)), loss_list) 
plt.savefig("warmstart_plots/pure_SGD:"+str(kwargs)+".png") 
plt.xlabel("Time in epochs") 
plt.ylabel("Loss") 
plt.close() 

Dieser Code wird eine normale SGDClassifier nehmen (nur ca. jeden linearen Klassifikator) und fängt das verbose=1 Flag ab und wird dann geteilt, um den Verlust vom ausführlichen Drucken zu erhalten. Offensichtlich ist dies langsamer, wird uns aber den Verlust bringen und es ausdrucken.

Verwandte Themen