【问题标题】:SGDClassifier save loss from every iteration to arraySGDClassifier 将每次迭代的损失保存到数组
【发布时间】:2019-06-20 16:01:53
【问题描述】:

当我在 scikit-learn 中训练 SGDClassifier 时,我可以打印出每次迭代的损失值(设置详细程度)。如何将值存储到数组中?

【问题讨论】:

    标签: scikit-learn gradient-descent


    【解决方案1】:

    修改这个post的答案。

    import numpy as np
    from io import StringIO
    import matplotlib.pyplot as plt
    from sklearn.linear_model import SGDClassifier
    from tensorflow.keras.datasets import mnist
    
    (x_tr, y_tr), (x_te, y_te) = mnist.load_dataset()
    x_tr, x_te = x_tr.reshape(-1, 784), x_te.reshape(-1, 784)
    

    通过SGDClassifier截取打印输出

    old_stdout = sys.stdout
    sys.stdout = mystdout = StringIO()
    

    通过将verbose 设置为1 来设置模型以打印其输出。

    clf = SGDClassifier(verbose=1)
    clf.fit(x_tr, y_tr)
    

    获取 SGDClassifier 详细程度的输出

    sys.stdout = old_stdout
    loss_history = mystdout.getvalue()
    

    创建一个列表来存储损失值

    loss_list = []
    

    附加打印的损失值,存储在 loss_history 中

    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.xlabel("Time in epochs"); plt.ylabel("Loss")
    plt.show()
    

    要将损失值保存到数组中,

    loss_list = np.array(loss_list)
    

    【讨论】:

      猜你喜欢
      • 2019-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-11
      • 2018-02-13
      相关资源
      最近更新 更多