Тренировка tenas в 2.0 keras с помощью ImageDataGenerator + flow_from_directory + tf.data.Dataset дает ошибку, связанную с "shape" - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь обернуть мой генератор в tf.data.Dataset (просто чтобы узнать об этом). Вот мой фрагмент. Надеюсь, кто-то может заметить, что я сделал не так.

img_gen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255)

gen = img_gen.flow_from_directory(data_path, target_size=(224, 224), batch_size=32)

dataset = tf.data.Dataset.from_generator(
            lambda: gen,
            output_types = (tf.float32, tf.float32),
            output_shapes = ([32, 224, 224, 3], [32, 6]),
)

model.fit(dataset, 
          steps_per_epoch = gen.n // 32, 
          epochs=10)

ValueError: generator дал элемент формы (11, 224, 224, 3), где ожидался элемент формы (32, 224, 224, 3).

1 Ответ

0 голосов
/ 24 марта 2020

Я "появился", чтобы решить эту проблему, если я изменил это:

dataset = tf.data.Dataset.from_generator(
    lambda: gen,
    output_types = (tf.float32, tf.float32),
    # output_shapes = ([32, 224, 224, 3], [32, 6]),
    output_shapes = ([None, 224, 224, 3], [None, 6]),
)

т.е. вместо явного размера пакета 32 в этом бите кода, я заменил его на None. По-видимому, больше не жалуются на (11, 224, 224, 3) оставшуюся часть партии. Но есть ли способ для набора данных для выборки 32 даже в конце? просто перевернитесь на «начало» поезда. Что-то все еще подозрительно для меня.

Я запустил .fit, и он, по-видимому, работает, потери теряются, а точность возрастает с каждой эпохой.

Если у кого-то есть способ лучше или объяснения, пожалуйста, дайте мне знать.

...