【问题标题】:Setting the number of output nodes in scikit-learn's MLPClassifier在 scikit-learn 的 MLPClassifier 中设置输出节点的数量
【发布时间】:2017-04-18 00:28:29
【问题描述】:

我目前正在试验 scikit-learn 的神经网络功能。有没有办法在其 MLPClassifier 中设置输出节点的数量?我知道您可以通过将其作为参数传递来设置隐藏层的数量,例如:

clf = MLPClassifier(hidden_layer_sizes=(100,)

谢谢

【问题讨论】:

  • @konpsych 为什么需要在输出中指定可选值? "Can someone train the same network on two different output sizes and different input sizes?" 是什么意思。
  • @VivekKumar 我认为在构建分类器时无法指定输入和输出层的唯一原因是可以训练同一个网络对不同的事物进行分类。但情况是这样吗?例如,您决定训练网络识别数字,然后您决定使用相同的网络识别数字+拉丁字符。这可能吗?
  • 不,scikit-learn 估计器并不打算按照您描述的方式进行扩展。输入特征和输出类应该是固定的。这适用于整个 sklearn api,并使所有内部估计器保持可用和兼容。这就是为什么 sklearn 不支持(也不计划支持)更深入的神经网络的原因。

标签: python scikit-learn neural-network perceptron


【解决方案1】:

输出节点的数量取决于标签的大小。

User Guide for Neural Networks 的一个例子:

>>> from sklearn.neural_network import MLPClassifier
>>> X = [[0., 0.], [1., 1.]]
>>> y = [[0, 1], [1, 1]]
>>> clf = MLPClassifier(solver='lbfgs', alpha=1e-5,
...                     hidden_layer_sizes=(15,), random_state=1)
>>> clf.fit(X, y)                         
>>> clf.predict([[1., 2.]])
array([[1, 1]])

【讨论】:

  • 哦,我明白了,谢谢!
【解决方案2】:

sklearn中输入层、隐藏层和输出层的架构和单元描述如下:

  • 输入单元的数量将是特征的数量(一般为偏置+1节点)
  • 对于多类分类,输出单元的数量将是标签的数量
  • 先尝试单个隐藏层
  • 隐藏层中的单元越多越好,尝试与输入特征的数量相同。

关于隐藏层的一些一般规则基于这篇论文如下:Approximating Number of Hidden layer neurons in Multiple Hidden Layer BPNN Architecture by Saurabh Karsoliya

一般:

  • 隐藏层神经元的数量是输入层大小的2/3(或 70% 到 90%)。
  • 隐藏层神经元数量应为输入层神经元数量的less than twice
  • 隐藏层神经元的大小为between输入层大小和输出层大小。

请始终牢记,您需要探索和尝试多种不同的组合。此外,使用GridSearch 您可以找到“最佳模型和参数”。例如。您可以执行GridSearch 以确定隐藏层的"best" 大小。

【讨论】:

    猜你喜欢
    • 2018-04-17
    • 2019-09-02
    • 2018-11-13
    • 2015-07-22
    • 2023-03-22
    • 2018-09-23
    • 2018-02-17
    • 2020-11-22
    • 2017-03-26
    相关资源
    最近更新 更多