具有keras / scikit-learn的简单分类器神经网络的平面输出矢量

时间:2019-05-13 14:58:34

标签: python tensorflow machine-learning keras neural-network

我想为一个简单的分类问题构建一个简单的神经网络。我刚刚发现了keras / scikit-learn包装器类,但是其行为并不完全符合预期。

from keras.wrappers.scikit_learn import KerasClassifier

KerasClassifier需要网络的构建功能:

def build_perceptron():
    net = keras.models.Sequential(
        [
            keras.layers.Dense(10, input_dim=4, activation="relu", kernel_initializer='random_uniform'),
            keras.layers.Dense(1, activation="sigmoid"),
        ]
    )
    net.compile(
        optimizer="adam",
        loss="binary_crossentropy",
        metrics=["binary_accuracy"]
    )
    return net

现在我可以按以下方式使用它:

model = KerasClassifier(
    build_fn=build_perceptron,
    epochs=100, 
    batch_size=5,
)

网络学会完美分类。但是,预测的形状为(n_samples, 1),而不是(n_samples,),这是scikit-learn所期望的:

y_pred = model.predict(X_test)

array([[1],
       [0],
       [1],
       [1],
       [0],
       [1], 

我尝试使用scikit-learn函数,为应该具有大约1.0的F1的分类器获得0.0 F1分数。

cross_val_score(
    KerasClassifier(
        build_fn=build_perceptron,
        epochs=100, 
        batch_size=5,
    ),
    X=X,
    y=y,
    scoring=make_scorer(f1_score, greater_is_better=True),
)

我是否需要以其他方式配置网络以获得正确的输出形状?

这有点令人困惑,因为训练标签是一维矢量,并且对形状没有抱怨。

0 个答案:

没有答案