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

3 人关注

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

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
yong li
yong li
发布于 2019-07-26
1 个回答
fcrv
fcrv
发布于 2020-02-06
已采纳
0 人赞同

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

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