Точность снижается на протяжении эпох с использованием Keras 'fit_generator - PullRequest
0 голосов
/ 11 апреля 2019

Краткое описание проблемы:

Я пробую базовую модель ANN в задаче двоичной классификации.У меня, вероятно, большие данные всего 2 ГБ состоит из 150 файлов CSV. Данные состоят из 6 функций и 1 цели.

Важное примечание: Это задача двоичной классификации, и каждый файл состоит только из одной метки.Например.file_1 содержит только метку 0, а file_2 включает только метку 1.

Задача 1: Я использую метод Keras * fit_generator для чтения файла данных по файлу и пакета по партии.Я начинаю тренировать модель, , но модель дает разные результаты в конце каждой тренировки. Кроме того, иногда точность уменьшается со временем.Я думаю, это из-за того, что eacy файл содержит только одну метку.

Проблема 2: Я не уверен, правильно ли я написал метод data_generator.Мне нужно получить данные из разных файлов CSV.Мы будем благодарны за любые предложения.

Какой-то код

Простая модель ANN:

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

1 Ответ

0 голосов
/ 11 апреля 2019

Извините за недопонимание вашей проблемы. Теперь у меня есть некоторые мысли о вашей задаче:

  1. Нейронные сети хорошо подходят для задачи больших измерений, но ваши данные имеют только 6 функций, что слишком мало для нейронных сетей.
  2. Может быть, вы можете попробовать некоторые методы машинного обучения, такие как дерево решений, SVM и некоторые методы повышения. Я думаю, что эти методы будут адаптироваться к вашей задаче.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...