我正在尝试使用scikit神经网络框架学习神经网络,我知道神经网络的基础知识,现在尝试使用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神经网络是否在我上面输入的代码中进行反向传播?
谢谢!
1.假设X_train
中的每个训练示例都有 M 个特征,并且y_train
中有 C 类:输入层(未在代码中显式显示(具有 M 个节点。隐藏层有 100 个节点。输出层具有 C 节点(每个节点对每个类的分数进行编码(。
阿拉伯数字。 .fit()
是一种做到这一点的方法 - 前馈训练示例并使用反向传播来训练 NN。
另外:也许您必须为最后一层添加units=C
- 我认为这是一个分类问题。如果只需要一个值(分数,而不是类标签(,请使用 Regressor
。
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。他在这里解释了这两个问题 解释
也谢谢@user7534232的回答:)