【问题标题】:Accuracy decreasing over epochs using Keras' fit_generator使用 Keras 的 fit_generator 的精度随着时间的推移而降低
【发布时间】:2019-04-12 15:13:37
【问题描述】:

问题总结:

我正在对二元分类任务尝试一个基本的 ANN 模型。我有大数据总共 2 GB150 个 csv 文件组成。数据由 6 个特征和 1 个目标组成。

重要提示:这是一个二分类任务,每个文件只包含一个标签。例如。 file_1 只包含标签 0,file_2 只包含标签 1。

问题一: 我使用 Keras 的fit_generator 方法,逐个文件,逐批读取数据。我开始训练模型,但模型在每次训练结束时给出不同的结果。此外,有时准确性会随着时间的推移而降低。我认为这是因为 eacy 文件只包含一个标签。

问题 2: 我不确定我是否正确编写了 data_generator 方法。我需要从不同的 CSV 文件中获取数据。任何形式的建议将不胜感激。

一些代码

简单的人工神经网络模型:

def create_model():
    model = Sequential()

    model.add(Dense(32, kernel_initializer='normal',
                    activation='relu', input_dim=(6)))
    model.add(Dropout(0.5))
    model.add(Dense(16, kernel_initializer='normal', activation='relu'))
    model.add(Dense(8, kernel_initializer='normal', activation='relu'))
    model.add(Dense(16, kernel_initializer='normal', activation='relu'))
    model.add(Dense(32, kernel_initializer='normal', activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(1, kernel_initializer='normal', activation='sigmoid'))

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

数据生成器: 我正在尝试从不同的 CSV 文件

生成数据
def data_generotto(path: str, batchsize: int):
    while True:
        for csv_file in os.listdir(path):
            chunks = pd.read_csv(os.path.join(
                path, csv_file), sep=';', chunksize=batchsize)

            for i, chunk in enumerate(chunks):
                X, y = preprocess.preprocess(chunk)

                yield (X, y)

获取数据总大小的代码:

def get_total_size(path: str):
    for csv_file in os.listdir(path):
        global SIZE
        with open(os.path.join(path, csv_file)) as f:
            for line in f:
                SIZE += 1

            SIZE -= 1 # minus header line

主程序流程:

np.random.seed(7)

SIZE = 0
BS = 1000
EPOCHS = 5

if __name__ == "__main__":
    model = cnn.create_model()

    get_total_size("./complete_csv")
    print("size calculated")

    H = model.fit_generator(data_generotto(
        "./complete_csv", BS), steps_per_epoch=SIZE // BS, epochs=EPOCHS, workers=-1)

    save_model(model, "./MODEL.h5")

【问题讨论】:

    标签: python keras


    【解决方案1】:

    对不起,我对您的问题的误解。现在我对你的任务有一些想法:

    1. 神经网络非常适合高维问题,但您的数据只有 6 个特征,这对于神经网络来说太短了。
    2. 也许您可以尝试一些机器学习方法,例如决策树、SVM 和一些提升方法。我认为这些方法将适应您的任务。

    【讨论】:

    • 不,我的意思是我有 150 个不同的文件,每个文件中的目标值为 0 或 1。每个文件没有不同的标签。您对数据生成过程有什么建议吗?一切看起来都还好吗?
    • @emremrah 训练过程中有没有日志,包括loss和accuracy?
    • 不是任何具体定义的日志,而是 fit_generator 的详细程度。通过不同的培训课程的准确性是不一致的。我刚刚训练了一个模型,最后一个 epoch 的准确率是 %93。上一次训练的结果只有 %23。我不明白为什么
    猜你喜欢
    • 2019-02-22
    • 2015-06-18
    • 2019-04-14
    • 2020-11-22
    • 1970-01-01
    • 2016-11-06
    • 2021-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多