使用Keras'fit\u gen的历次精度下降

2024-04-27 04:23:57 发布

您现在位置:Python中文网/ 问答频道 /正文

问题摘要:

我正在二元分类任务中尝试一个基本的人工神经网络模型。我可以说是大数据,总共2 GB,由150个csv文件组成。你知道吗

重要提示:这是一个二进制分类任务,每个文件只包含一个标签。例如,文件1只包含标签0,文件2只包含标签1。你知道吗

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

问题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")


Tags: 文件csvpath模型addforsizemodel
1条回答
网友
1楼 · 发布于 2024-04-27 04:23:57

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

  1. 神经网络很适合高维问题,但是你的数据只有6个特征,这对神经网络来说太短了。你知道吗
  2. 也许你可以尝试一些机器学习方法,比如决策树,支持向量机和一些boosting方法。我认为这些方法会适应你的任务。你知道吗

相关问题 更多 >