Keras2 ImageDataGenerator или TensorFlow tf.data? - PullRequest
2 голосов
/ 11 апреля 2019

С Keras2, внедряемым в TensorFlow и TensorFlow 2.0 на горизонте, следует ли вам использовать Keras ImageDataGenerator с, например, flow_from_directory или tf.data из TensorFlow, который также можно использовать с fit_genearator Keras сейчас?

Будут ли оба метода иметь свое место, служа разным целям, или tf.data станет новым путем, и генераторы Keras устареют в будущем?

Спасибо, я хотел бы пойти по пути, который держит меня в курсе дела дольше в этой быстро меняющейся области.

Ответы [ 2 ]

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

С момента выпуска TensorFlow Dataset API является рекомендуемым по умолчанию способом построения входного конвейера для любой модели, построенной на основе TensorFlow, как Keras, так и низкоуровневого TensorFlow. В более поздних версиях TF 1.xx его можно напрямую использовать в методе tf.keras.Model.fit как

model.fit(dataset, epochs)

Это хорошо как для быстрого прототипирования,

dataset = tf.data.Dataset.from_tensor_slices((train, test))
dataset = dataset.shuffle().repeat().batch()

А для строительства сложных высокопроизводительных трубопроводов ETL 4. Обновите ваши конвейеры ввода данных, подробнее об этом здесь https://www.tensorflow.org/guide/performance/datasets

Согласно официальным документам, в TF 2.0 это также будет способ ввода данных в модель по умолчанию. https://www.tensorflow.org/alpha/guide/migration_guide

Поскольку по умолчанию следующая версия TensorFlow будет выполняться с нетерпением, объект набора данных станет итеративным и станет еще проще в использовании.

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

Для меня я предпочитаю строить генератор с yield:

def generator(batch_size=4,path):
imgs=glob(path+'*.jpg')
while True:
    batch=[]
    for i in range(batch_size):
        idx=np.random.randint(0,len(imgs))
        img=cv.resize(cv.imread(imgs[idx]),(256,256))/255
        batch.append(img)
    batch=np.array(batch)
    yield batch

Затем создайте генератор и введите его в model.fit_generator, он будет работать.

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

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

...