收敛警告:随机优化器:达到最大迭代次数(10),并且优化尚未收敛。收敛警告)

时间:2019-07-25 21:10:50

标签: scikit-learn

我正在尝试sklearns编写有关MNIST数据集上的neutral_work训练的文章。 为什么优化器没有收敛?还可以做些什么来提高我得到的准确度?

python

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()

1 个答案:

答案 0 :(得分:1)

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

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

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

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)

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

但是,此机器学习模型可能存在更致命的问题。 MNIST数据集是一组手写字符图像。 MLP是一种高度灵活的机器学习模型,但是,它可能不是用于计算机视觉和图像分类的适当模型。使用MLP可能会获得一些积极的结果,使用卷积神经网络可能会获得更好的结果,而卷积神经网络基本上是真正的MLP。