在 Seizure 数据集上使用 Keras 进行二进制分类

Posted

技术标签:

【中文标题】在 Seizure 数据集上使用 Keras 进行二进制分类【英文标题】:Binary Classification with Keras on Seizure dataset 【发布时间】:2017-12-28 18:55:07 【问题描述】:

起初,我使用的是癫痫发作识别数据集 (来源:http://archive.ics.uci.edu/ml/datasets/Epileptic+Seizure+Recognition)

嘿,我在将模型拟合到数据集时遇到问题。

这是我正在使用的代码:

import pandas
from keras.models import Sequential
from keras.layers import Dense
import numpy


def main():
    dataset = pandas.read_csv("data.csv")
    Y = dataset["y"]
    X = dataset.drop("y", axis=1).drop("Unnamed: 0", axis=1)
    Y = Y.values
    X = X.values

    model = Sequential()
    model.add(Dense(178, input_dim=178, activation='relu'))
    model.add(Dense(500, activation="relu"))
    model.add(Dense(1000, activation='relu'))
    model.add(Dense(500, activation='relu'))
    model.add(Dense(250, activation='relu'))
    model.add(Dense(100, activation='relu'))
    model.add(Dense(20, activation='relu'))
    model.add(Dense(1, activation='sigmoid'))

    model.compile(loss="binary_crossentropy", optimizer="adam",   metrics=["accuracy"])

    model.fit(X, Y, epochs=1000, batch_size=300)

if __name__ == '__main__':
    main()

每个输出看起来都像这样:

Epoch 330/500
11500/11500 [==============================] - 0s - loss: -31.8848 - acc: 0.2000

所以我的训练不正常。我究竟做错了什么?对我来说还有其他问题,例如:

1) 我必须添加多少层和多少个单元?有没有经验法则?

2) 我必须使用什么激活函数?

【问题讨论】:

你是什么意思每个输出看起来像这样?每次都显示 330/500? 不,损失和 acc 保持不变,而数据被迭代 【参考方案1】:

这不是一个二元分类数据集。根据数据集页面,

y 包含 178 维输入向量的类别。特别是 y 在 1, 2, 3, 4, 5

1) 我必须添加多少层和多少个单元?有没有经验法则?

这取决于。您必须调整这两个数字以获得最佳性能。但是,对于大约 10k 个实例的数据集,我猜 8 个全连接层和 1000 个单元都太多了。

2) 我必须使用什么激活函数?

ReLU 通常是堆叠Dense 层的良好起点。

【讨论】:

哦,我的错,我想我会尝试一个多变量分类模型,谢谢你的建议!

以上是关于在 Seizure 数据集上使用 Keras 进行二进制分类的主要内容,如果未能解决你的问题,请参考以下文章

为啥在同一数据集上使用 tensorflow 和 keras 重新训练的 Inception V3 显示出不同的准确性?

Keras:网络不使用 fit_generator() 进行训练

MNIST 数据集上 keras 上的 i-RevNet

关于 Keras 迁移学习的讨论

Keras 没有使用完整的 CPU 内核进行训练

Keras,训练期间验证集上的 auc 与 sklearn auc 不匹配