我是做数字分类器与MNIST数据集使用MLP分类器。我观察到非常奇怪的行为。单层分类器优于多层分类器。而单层神经元数量的增加似乎提高了准确性。为什么多层比单层好?这是我的代码:
param_grid={'hidden_layer_sizes':[400,300,200,100,70,50,20,10]}
grid=GridSearchCV(MLPClassifier(random_state=1),param_grid,cv=3,scoring='accuracy')
grid.fit(train_data.iloc[:,1:],train_data.iloc[:,0])
grid.grid_scores_产出:
[mean: 0.97590, std: 0.00111, params: {'hidden_layer_sizes': 400},
mean: 0.97300, std: 0.00300, params: {'hidden_layer_sizes': 300},
mean: 0.97271, std: 0.00065, params: {'hidden_layer_sizes': 200},
mean: 0.97052, std: 0.00143, params: {'hidden_layer_sizes': 100},
mean: 0.96507, std: 0.00262, params: {'hidden_layer_sizes': 70},
mean: 0.96448, std: 0.00150, params: {'hidden_layer_sizes': 50},
mean: 0.94531, std: 0.00378, params: {'hidden_layer_sizes': 20},
mean: 0.92945, std: 0.00320, params: {'hidden_layer_sizes': 10}]多层结构:
param_grid={'hidden_layer_sizes':[[200],[200,100],[200,100,50],[200,100,50,20],[200,100,50,20,10]]}
grid=GridSearchCV(MLPClassifier(random_state=1),param_grid,cv=3,scoring='accuracy')
grid.fit(train_data.iloc[:,1:],train_data.iloc[:,0])
grid.grid_scores_输出:
[mean: 0.97271, std: 0.00065, params: {'hidden_layer_sizes': [200]},
mean: 0.97255, std: 0.00325, params: {'hidden_layer_sizes': [200, 100]},
mean: 0.97043, std: 0.00199, params: {'hidden_layer_sizes': [200, 100, 50]},
mean: 0.96755, std: 0.00173, params: {'hidden_layer_sizes': [200, 100, 50, 20]},
mean: 0.96086, std: 0.00511, params: {'hidden_layer_sizes': [200, 100, 50, 20, 10]}]关于数据集: 28*28像素图像的手写数字。
发布于 2018-04-18 13:08:02
在我看来,你的模型太合适了。您可以通过比较train_scores (使用参数return_train_score=True)和test_scores来检查这一点。
如果它已经过分适合,那么使您的NN更深或增加单位的隐藏层可能会使它更糟。因此,尝试获取更多的数据和/或找到一个适当的alpha (正则化参数),以使您的模型表现得更好。
发布于 2018-04-18 12:53:24
我只能从理论上回答:
有一个叫做“普适逼近定理”的定理,它通常说:“任何一个ANN和MLP都可以用一个只有一个隐藏层的MLP来表示。”
所以这可能是你的问题。对于这个问题,有1层的MLP有正确的参数,而另一方面,你还没有找到适合多层的。
编辑:更多的层并不意味着更好的性能。在安,有时更大,但不是更好。(xD)
https://stackoverflow.com/questions/49899914
复制相似问题