fit_generator () выводит результат, отличный от fit () - PullRequest
0 голосов
/ 28 марта 2019

У меня проблема с выводом fit_generator (), он выводит результат, отличный от метода fit (). У меня есть каталог, где хранятся данные пациентов. пациенты_х имеют все признаки, а пациенты_y имеют соответствующие зависимые переменные, которые я пытаюсь предсказать. Проблема в том, что когда я пытаюсь загрузить каждого пациента и выдавать партии его данных на каждой итерации (очевидно, на следующей итерации для следующего пациента), я получаю другой результат, как если бы я делал то же самое, но вместо загрузки 1 пациента на каждую итерацию я бы загружал все пациентов сразу и объединить их. Подводя итог: если я загружаю всех пациентов в память, а затем выдаю пакеты -> это выдает правильный результат, но если я загружаю каждую итерацию только 1 пациента (потому что у меня недостаточно ОЗУ для загрузки всех данных) и выдаю партии от этого пациента - -> выводит плохой результат. Я проверил, выводит ли генератор те же пакеты данных, что и делает. Пожалуйста, помогите мне, если можете.

Этот генератор выдает правильный результат. Я передаю весь набор данных

def new_gen_shuffle(batch_size, X_train, y_train):
    while True:
        indices = np.arange(X_train.shape[0])
        np.random.shuffle(indices)
        for patient_batch in range(X_train.shape[0]):
                inds = indices[patient_batch * batch_size:(patient_batch + 1) * batch_size]
                batch_x = X_train[inds]
                batch_y = y_train[inds]
                if batch_x.shape[0] > 0 and batch_y.shape[0] > 0:
                    yield batch_x, batch_y

но этот не работает должным образом. Я получаю партии для каждого пациента (каждая итерация для следующего пациента) Но обе они выдают одинаковые партии

def batch_generator(batch_size, patients_x, patinets_y):
    while True:
        for patient in range(len(patients_x)):  
            X_train = np.load(path + "/" + patients_x[patient])
            y_train = np.load(path + "/" + patients_y[patient])
            indices = np.arange(X_train.shape[0])
            np.random.shuffle(indices)
            for patient_batch in range(X_train.shape[0]):
                inds = indices[patient_batch * batch_size:(patient_batch + 1) * batch_size]
                batch_x = X_train[inds]
                batch_y = y_train[inds]
                if batch_x.shape[0] > 0 and batch_y.shape[0] > 0:
                    yield batch_x, batch_y
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...