У меня очень большой набор данных изображений с высоким разрешением, поэтому я тренируюсь над небольшими порциями, используя 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 уже устраняет узкие места ввода / вывода.
Заранее спасибо!