尖端神经网络中神经网络的反向传播与结构

时间:2017-02-07 19:49:13

标签: python machine-learning scikit-learn neural-network deep-learning

我正在尝试使用scikit-neuralnetwork框架学习神经网络,我知道有关神经网络的基础知识,现在尝试用scikit-learn实现它。但我对2分感到困惑。

1-下面给出的这个NN的结构是什么?不知何故,在某些例子中,有些人不把输入层作为一层。否则,我认为这是一个2层NN的输入层,在输出层有100个节点和1个节点。

from sknn.mlp import Classifier, Layer

nn = Classifier(
   layers=[
    Layer("Maxout", units=100, pieces=2),
    Layer("Softmax")],
learning_rate=0.001,
n_iter=25)

nn.fit(X_train, y_train)

2- scikit-neuralnetwork是否在我上面的代码中进行反向传播?

谢谢!

2 个答案:

答案 0 :(得分:1)

1。 假设y_train中的每个训练示例都有M个特征,并且.fit()中有C类: 输入层(未在代码中明确显示)具有M个节点。隐藏层有100个节点。输出层有C个节点(每个节点编码每个类的分数)。

2。 units=C是一种方法,它可以提供培训示例并使用反向传播来训练NN。

另外:也许你必须为最后一层添加Regressor - 我认为这是一个分类问题。如果您只需要一个值(分数,而不是类标签),请使用{{1}}。

答案 1 :(得分:0)

1-在scikit-neuralnetwork框架中,输入图层未显示,但是当我们向系统提供训练数据时,它在背景中作为图层被创建。

nn.fit(X_train, y_train)

例如,假设我们使用的是虹膜花数据集。它有3个类,所以如果那个案例框架从y_train理解它并且它创建3个输入层有3个类。

y_train = [0,0,0,1,2,]
X_train = [[ 7.1  3.   5.9  2.1]
           [ 5.9  3.   4.2  1.5]
           [ 5.5  2.4  3.7  1. ]
           [ 6.1  2.8  4.7  1.2]
           [ 5.   2.3  3.3  1. ]]

除最后一层外,所有其他图层都是隐藏图层。我看到当我操纵最后一层时,得到了这个错误

    nn = Classifier(
    layers=[
            Layer("Maxout", units=100, pieces=2),
            Layer("Softmax",units=1)],   -----> if units is 3 that's ok!
            learning_rate=0.001,
            n_iter=25)
    "Mismatch between dataset size and units in output layer."
    AssertionError: Mismatch between dataset size and units in output layer.

2-更详细的解释;感谢datascience.stackexchange上的@robintibor。他在这里解释了两个问题Explanation

并感谢@ user7534232也给你答案:)