Как я могу сохранить прогресс обучения при обучении нейронной сети в sklearn?

#python #scikit-learn #neural-network

#python #scikit-learn #нейронная сеть

Вопрос:

Я намерен использовать MLPRegressor для набора данных кортежей on (x, y) для оценки y = f (x). Цель состоит в том, чтобы сохранять нейронную сеть после каждой эпохи во время обучения. Я хотел бы сделать анимацию, показывающую, как сеть улучшается в процессе обучения.

Есть ли способ, как это сделать, не переделывая исходный код? Когда я выполнял аналогичную задачу в разных случаях (например, оптимизация) Я просто использовал опцию обратного вызова, которая здесь недоступна.

Ответ №1:

Что-то вроде этого должно работать:

 from sklearn import neural_network
m = neural_network.MLPRegressor()
# define data X, y

for j in m.max_iter:
    
    m.partial_fit(X=x, y=y) # or m.fit(X=x, y=y, incremental=True)           
    # <your code after each training increment>
 

partial_fit похоже, он предназначен для этого случая. В документах говорится: «Обновите модель одной итерацией по заданным данным». Ранняя остановка может вызвать ошибку или предупреждение, но с ней должно быть легко справиться.

Комментарии:

1. Большое спасибо, это действительно помогло мне.

2. если вам нужно «более приятное» решение, вы можете подклассировать модель и добавить функцию обратного вызова к fit методу