2017-06-08 53 views
2

我想在訓練期間檢查我的損失值,以便在每次迭代時觀察損失。到目前爲止,我還沒有找到一個簡單的方法讓scikit學習給我一個損失值的歷史,我也沒有找到scikit中的功能來爲我繪製損失。Python sklearn在訓練期間顯示丟失值

如果沒有辦法對此進行繪圖,如果我可以簡單地在classifier.fit的末尾獲取最終損失值,那就太好了。

注意:我知道一些解決方案是封閉的。我使用了幾個沒有分析解決方案的分類器,例如邏輯迴歸和svm。

有沒有人有任何建議?

+0

你能解釋一下你想要的東西嗎? –

+0

這與你所要求的接近嗎? http://scikit-learn.org/stable/modules/generated/sklearn.metrics.log_loss.html – MichaelMMeskhi

回答

2

,所以我不能直接取每次迭代的損耗值找到很好的文檔,但我希望這會幫助別人的未來:

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() 

該代碼將正常SGDClassifier(只是任何線性分類器),並攔截verbose=1標誌,然後將分割以從詳細打印中獲得損失。顯然這比較慢,但會給我們帶來損失並打印出來。

相關問題