【问题标题】:How to train single data present in a data set to a already trained neural network?如何将数据集中存在的单个数据训练到已经训练好的神经网络?
【发布时间】:2019-01-30 19:48:24
【问题描述】:

我已经有一个经过训练的神经网络,

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]

【问题讨论】:

  • 你不能只用一个样本来调用fit()。请改用partial_fit()

标签: python python-3.x scikit-learn neural-network python-3.5


【解决方案1】:

暂时忘掉warm_start,试着理解usage of fit()

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

因此,如果您仅提供单个类的数据,模型将无法学习任何东西。 MLPClassifier 中的warm_start 用于:

重用之前调用的解决方案以适应初始化

因此,训练可以更快,之前训练的权重将用作初始权重,但仍需要访问多个类数据才能区分它们。

现在看到你的问题,我想你想将模型用作incremental classifier:-

实际上,从小批量的学习中逐步学习的能力 实例(有时称为“在线学习”)。所有估计器 实现 partial_fit API 是候选者。

因此,如果您只想让模型逐步学习更新的数据,则需要执行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.

【讨论】:

  • 问题解决了,还创建了另一个警告(来自警告模块):文件“D:\Python3.5\lib\site-packages\sklearn\neural_network\multilayer_perceptron.py”,第 927 行,如果 np .setdiff1d(classes, self.classes_, assume_unique=True): DeprecationWarning: 空数组的真值是不明确的。返回 False,但将来这将导致错误。使用array.size &gt; 0 检查数组是否为空。请建议路线
  • 有时我得到相同的结果(错误),有时是预期的结果。注意:使用 StandardScaler
  • @Nikhil 关于警告:它来自 numpy,无需担心。下一个 scikit 版本会适当地处理它。
  • @Nikhil 关于这个错误(结果相同),我需要更多信息:- 完整的代码和一些数据样本来重现问题。
  • 我正在尝试根据用户是否喜欢[1][0]对音乐进行分类。有时我只得到零或一
猜你喜欢
  • 2019-10-20
  • 1970-01-01
  • 1970-01-01
  • 2016-04-02
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
  • 2020-09-10
  • 1970-01-01
相关资源
最近更新 更多