Как обучить отдельные данные, представленные в наборе данных, уже обученной нейронной сети? - PullRequest
0 голосов
/ 24 августа 2018

У меня уже есть обученная нейронная сеть,

clf = neural_network.MLPClassifier(
        activation='relu',
        hidden_layer_sizes=(40,40,40,40),
        learning_rate='adaptive',
        learning_rate_init=0.01,
        solver='sgd',
        alpha=1e-6,
        max_iter=20000,
        warm_start=True,
)

Я тренировал это,

clf.fit(X,Y)

Этот классификатор имеет два класса [0,1].

Теперь, когда я тренируюсь дальше, используя один набор данных за один раз. clf.fit ([features_1], [1]) Ошибка выскакивает

Traceback (most recent call last):
  File "<pyshell#20>", line 1, in <module>
    fav_clf.fit(X_, Y)
  File "D:\Python3.5\lib\site-packages\sklearn\neural_network\multilayer_perceptron.py", line 973, in fit    
hasattr(self, "classes_")))
  File "D:\Python3.5\lib\site-packages\sklearn\neural_network\multilayer_perceptron.py", line 331, in _fit
X, y = self._validate_input(X, y, incremental)
  File "D:\Python3.5\lib\site-packages\sklearn\neural_network\multilayer_perceptron.py", line 924, in _validate_input
(self.classes_, classes))
ValueError: warm_start can only be used where `y` has the same classes as in the previous call to fit. Previously got [0 1], `y` has [1]

1 Ответ

0 голосов
/ 24 августа 2018

Забудьте о warm_start на минуту и ​​попытайтесь понять использование fit().

fit(X, y):
    Fit the model to data matrix X and target(s) y.

Таким образом, модель не может ничего узнать, если вы предоставите данные только для одного класса. warm_start в MLPClassifier используется для:

повторно использовать решение предыдущего вызова в качестве инициализации

Таким образом, обучение может быть более быстрым, веса от предыдущего обучения будут использоваться в качестве начальных весов, но ему все равно потребуется доступ к данным нескольких классов, чтобы иметь возможность различать их.

Теперь, увидев ваш вопрос, я думаю, вы хотите использовать модель в качестве инкрементального классификатора : -

На самом деле, способность учиться постепенно из мини-партии случаи (иногда называемые «онлайн-обучение»). Все оценки Реализация API-интерфейса part_fit - это кандидаты.

Так что, если вы просто хотите, чтобы модель постепенно изучала новые данные, вам нужно сделать partial_fit(). Но учтите, что вам придется повернуть warm_start = False, чтобы использовать partial_fit().

# First call to partial_fit
clf.partial_fit(X, Y, classes=[0, 1])

# All next calls
clf.partial_fit(X, Y)    #<==  Here you can pass a single sample.
...