SGDClassifier сохраняет потери от каждой итерации к массиву - PullRequest
0 голосов
/ 27 января 2019

Когда я тренирую SGDClassifier в scikit-learn, я могу распечатать значение потерь на каждой итерации (настройка многословия).Как сохранить значения в массиве?

1 Ответ

0 голосов
/ 27 января 2019

Изменение ответа из этого сообщения .

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 = []

Добавьте напечатанные значения потерь, которые хранятся в истории потерь

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...