我正在尝试使用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是否在我上面的代码中进行反向传播?
谢谢!
答案 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也给你答案:)