加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python sklearn在训练期间显示损失值

发布时间:2020-12-16 22:40:28 所属栏目:Python 来源:网络整理
导读:我想在训练期间检查我的损失值,这样我就可以观察每次迭代时的损失.到目前为止,我还没有找到一个简单的方法让scikit学会给我一个损失值的历史,我也没有找到一个功能已经在scikit中为我绘制损失. 如果无法绘制这个,那么如果我可以简单地在classifier.fit的末尾

我想在训练期间检查我的损失值,这样我就可以观察每次迭代时的损失.到目前为止,我还没有找到一个简单的方法让scikit学会给我一个损失值的历史,我也没有找到一个功能已经在scikit中为我绘制损失.

如果无法绘制这个,那么如果我可以简单地在classifier.fit的末尾获取最终的损失值,那就太好了.

注意:我知道某些解决方案是封闭的形式.我正在使用几个没有分析解决方案的分类器,例如逻辑回归和svm.

有没有人有什么建议?

最佳答案
所以我找不到关于直接获取每次迭代损失值的非常好的文档,但我希望这将有助于未来的人:

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标志,然后将进行拆分以从详细打印中获取损失.显然这是较慢但会给我们带来损失并打印出来.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读