【问题标题】:ConvergenceWarning: Stochastic Optimizer: Maximum iterations (10) reached and the optimization hasn't converged yetConvergenceWarning:随机优化器:达到最大迭代次数 (10),优化尚未收敛
【发布时间】:2019-12-04 05:11:10
【问题描述】:

我正在尝试 sklearn 撰写有关在 MNIST 数据集上训练中性工作的文章。 为什么优化器没有收敛?还可以做些什么来提高我输入的准确性?

import matplotlib.pyplot as plt
from sklearn.datasets import fetch_openml
from sklearn.neural_network import MLPClassifier

print(__doc__)

# load data from http://www.openml.org/d/d554
X, y = fetch_openml('mnist_784', version=1, return_X_y=True)
X = X / 255.

# rescale the data. use the traditional train/test split
X_train, X_test = X[:60000], X[60000:]
y_train, y_test = y[:60000], y[60000:]

# mlp = MLPClassifier(hidden_layer_sizes=(100, 100), max_iter=400, alpha=1e-4,
#                    solver='sgd' , verbose=10, tol=14-4, random_state=1)
mlp = MLPClassifier(hidden_layer_sizes=(50,), max_iter=10, alpha=1e-4,
                    solver='sgd', verbose=10, tol=1e-4, random_state=1,
                    learning_rate_init=.1)

mlp.fit(X_train, y_train)
print("Training set score: %f" % mlp.score(X_train, y_train))
print("Test set score: %f" % mlp.score(X_test, y_test))

fig, axes = plt.subplots(4, 4)
# use global min/max to ensure all weights are shown on the same scale
vmin, vmax = mlp.coefs_[0].min(), mlp.coefs_[0].max()
for coef, ax in zip(mlp.coefs_[0].T, axes.ravel()):
    ax.matshow(coef.reshape(28, 28), cmap=plt.cm.gray, vmin=.5 * vmin,
               vmax=.5 * vmax)
    ax.set_xticks(())
    ax.set_yticks(())

plt.show()

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

    “ConvergenceWarning:随机优化器:达到最大迭代次数 (10),优化尚未收敛。ConvergenceWarning)”

    收敛点是机器学习模型本地化的最佳状态。它基本上意味着模型中的变量具有最佳可能值(在某个附近),以便根据另一组特征预测目标特征。在多层感知器 (MLP) 中,这些变量是每个神经元内的权重。通常,当数据集不代表有组织且可辨别的模式时,机器学习算法可能无法找到收敛点。但是,如果存在收敛点,机器学习模型会尽力找到它。为了训练 MLP,您需要在网络中多次迭代数据集,以便其权重找到收敛点。您还可以限制迭代次数以限制处理时间或作为正则化工具。

    在您的代码示例中,您有 2 个 MLP 模型,但我将重点关注未注释的 sn-p:

    mlp = MLPClassifier(hidden_layer_sizes=(50,), max_iter=10, alpha=1e-4,solver='sgd', verbose=10, tol=1e-4, random_state=1,learning_rate_init=.1)
    

    有几个参数可能会影响模型收敛所需的迭代次数,但是您可以做的最简单的更改是增加最大迭代次数,例如将其设置为 max_iter=100 或任何其他需要更大的价值。

    但是,这种机器学习模型可能存在更深层次的问题。 MNIST 数据集是一组书面字符图像。 MLP 是一种高度灵活的机器学习模型,然而,它可能不是计算机视觉和图像分类的合适模型。使用 MLP 可能会得到一些积极的结果,使用卷积神经网络可能会得到更好的结果,这基本上是非常花哨的 MLP。

    【讨论】:

      猜你喜欢
      • 2020-06-20
      • 2018-02-12
      • 2018-11-16
      • 1970-01-01
      • 2019-03-11
      • 1970-01-01
      • 2020-06-20
      • 2011-02-03
      • 1970-01-01
      相关资源
      最近更新 更多