python - 带有 keras/scikit-learn 的简单分类器神经网络的平面输出向量
问题描述
我想为一个简单的分类问题构建一个简单的神经网络。我刚刚发现了 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 函数并为 F1 大约为 1.0 的分类器获得了 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),
)
我是否需要以不同的方式配置网络以获得正确的输出形状?
这有点令人困惑,因为训练标签是一维向量并且没有关于形状的抱怨。
解决方案
推荐阅读
- python-3.x - 通过UART写入微控制器
- java - 如何修复我的排序方法所以我得到名字的字母顺序
- ibm-cloud - IBM Cloud Functions:是否可以让一个函数由多个 Javascript 文件组成?
- reactjs - 无法在已解析的 html 中修改子项
- python - 在 GroupByKey 之后减少 PCollection
- dart - How to make HTTP request on dart and pass parameters
- python - 一组开关和灯的最大流量
- protractor - 改变
量角器中的值 - selenium - 如何获得在其上执行 selenium 脚本的应用程序的代码覆盖率?
- php - 加载数据文件的无缓冲查询错误