使用来自sklearn.neural_network的MLPClassifier的MemoryError

时间:2017-12-09 01:00:29

标签: python-3.x scikit-learn

我在Windows 10 64位操作系统上运行python 3.5。

当我尝试实施MLPClassifier时,代码会运行一段时间然后给我一个MemoryError

我认为这是由于我要求它运行的隐藏层的大小,但我需要运行此大小来收集我的数据。我该如何规避这个错误?

代码

gamma=[1,10,100,1000,10000,100000]#create array for range of gamma values
score_train=[]
score_test=[]
for j in gamma:
    mlp = MLPClassifier(solver='lbfgs', random_state=0, hidden_layer_sizes=[j,j], activation='tanh').fit(data_train, classes_train)
    score_train.append(mlp.score(data_train,classes_train))
    score_test.append(mlp.score(data_test,classes_test))
print (score_train)
print (score_test)

错误

Memory Erroy Traceback

1 个答案:

答案 0 :(得分:1)

  

代码运行一段时间然后给我一个MemoryError。我认为这是由于我要求它运行的隐藏层的大小,但我需要运行此大小来收集我的数据。

是的,这是隐藏层的大小!而那句话的剩余部分没有多大意义(继续阅读)!

请务必阅读tutorialAPI-docs

现在有一些更具体的评论:

  • 隐藏层的大小与数据集合无关!
    • 输入和输出图层将根据X,y
    • 的尺寸构建
    • hidden_layer_sizes=[j,j]实际上正在创建 2 隐藏层!
  • 在MLP中,所有图层都完全连接!
    • 当你尝试做hidden_layer_sizes=[100000, 100000]时,使用 ~76千兆字节的内存(假设是64位双打)只是为了连接这两个层的这些权重!
      • 这只是一个连接层:输入-h0和h1-输出仍然缺失
  • lbfgs是一个完全不同于其他所有人的解算器。如果不了解其含义,请不要使用它! 它不是默认值!
    • 它是完整批处理方法,因此当样本量很大时会占用更多内存!
    • 此外,与其他(一阶)方法相比,使用更多内存的内部原因更多
    • 不是那么精确,但文档已经给出了一些提示:Note: The default solver ‘adam’ works pretty well on relatively large datasets (with thousands of training samples or more) in terms of both training time and validation score. For small datasets, however, ‘lbfgs’ can converge faster and perform better.