.prefetch () и .cache () не ускоряют конвейер tf.data.Dataset - PullRequest
0 голосов
/ 29 февраля 2020

У меня очень большой набор данных изображений с высоким разрешением, поэтому я тренируюсь над небольшими порциями, используя keras.fit. Для загрузки чанков в память у меня есть функция генератора, которая генерирует кортеж тензоров переменного размера, который я передаю в tf.data.Dataset для создания конвейера данных.

def extract_XY(list_idx):
    read_images(list_idx)
    append to list X
    process, extract patch and convert to tensor X (?,100,100,3)  #? means variable size mini-batch
    Y = f(X)  
    return X,Y

for i in range(epochs):
    for j in range(chunks):
        x,y = extract_XY(list_idx) #list_idx changes in each loop
        data = tf.data.Dataset.from_tensor_slices((X,Y)).batch(64).cache().prefetch(tf.data.experimental.AUTOTUNE)
        model.fit(data,epochs=2,verbose=1)

Моя тренировка с использованием keras fit работает, но все еще медленно Я не вижу ускорения с помощью .cache () или .prefetch () Может кто-нибудь помочь мне понять, правильно ли я использую их в моем случае. Я не могу использовать опцию tf.data.Dataset.from_generator, так как мой генератор не выдает последовательность.

Могу ли я сделать свой конвейер данных более эффективным, т. Е. Загружать следующий блок во время обучения модели? Любые предложения были бы полезны? Поможет ли использование multiprocessing = True в Keras.fit () больше? или tf.data.Dataset уже устраняет узкие места ввода / вывода.

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...