Keras fit_generator - потребление памяти слишком велико? - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь запустить числа по потреблению памяти для моей модели Keras, но они не складываются.

У меня есть модель с 3 входами / 3 выходами (назовем их 6 различными изображениями).Каждое изображение имеет (1216, 540, 1) форму.Также я использую одинарную точность, чтобы уменьшить ее размер.Я использую мини-партию из 6 образцов, и в моем генераторе у меня есть max_queue_size=5.У меня есть около 150 тыс. Обучаемых параметров (каждые 16 байт), так что это не имеет значения.

При этом мое потребление памяти должно быть:

queue_size x batch_size x (6, 1216, 540, 1) x sp bytes

То есть;

5 x 6 x 3939840 x 4 = 47278000 bytes = 0.44 GB

Вместо этого в моей памяти всплески составляют 20 ГБ, а в среднем около 10-12 ГБ.Является ли Keras, использующий серверную часть Tensorflow, требовательным к памяти инструментом?(например, дублирует ли он данные для определенных операций?) Что-то еще мне не хватает?Ниже приведен код моего генератора, поскольку, возможно, недоразумение заключается в самом коде.

def gen(df, batch_size=64, shuffle=False, seed=2019, n_batches=None):
    if n_batches is None:
        n_batches = np.ceil(df.shape[0] / batch_size)
        print(n_batches)

    if shuffle:
        np.random.seed(seed)
        df = df.sample(frac=1)

    it = 0  # Iterations counter
    while True:
        idx_start = batch_size * it
        idx_end = batch_size * (it + 1)
        xy = np.empty((6, batch_size, N, M, 1))

        for i,sample_files in enumerate(df.iloc[idx_start:idx_end].values):
            for field,f in enumerate(sample_files):
                p = io.read_data(f, shape=(N, M), ncomponents=1)
                p = p[..., np.newaxis]  # To transform from (N, M) to (N, M, 1)
                p = p.astype(np.float32, copy=False)
                xy[field,i] = p

        it += 1
        yield [xy[0],xy[1],xy[2]],[xy[3],xy[4],xy[5]]

        if it == n_batches:
            np.random.seed(seed + 1)
            df = df.sample(frac=1)
            it = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...