Керас CNN классификатор - PullRequest
       13

Керас CNN классификатор

0 голосов
/ 11 ноября 2019

У меня есть вопрос относительно CNN в Керасе, если вы хотите мне помочь, я был бы очень признателен.

Отказ от ответственности: я новичок в CNN и Керасе, я только учу ихпрямо сейчас.


Мои данные:

2 Классы (собаки и кошки)

Обучение: 30 фото в каждой категории

Тест: 14 фото для каждой категории

Действительный: 30 фото для каждой категории


Мой код:

data_path = Path("../data")

train_path = data_path / "train"
test_path = data_path / "test"
valid_path = data_path / "valid"

train_batch = ImageDataGenerator().flow_from_directory(directory=train_path,
                                                       target_size=(200, 200),
                                                       classes=animals,
                                                       batch_size=10)

valid_batch = ImageDataGenerator().flow_from_directory(directory=valid_path,
                                                       target_size=(200, 200),
                                                       classes=animals,
                                                       batch_size=10)

test_path = ImageDataGenerator().flow_from_directory(directory=test_path,
                                                     target_size=(200, 200),
                                                     classes=animals,
                                                     batch_size=4)

imgs, labels = next(train_batch)

model = Sequential(
    [Conv2D(32, (3, 3), activation="relu", input_shape=(200, 200, 3)), Flatten(),
     Dense(len(animals), activation='softmax')])

model.compile(Adam(lr=.0001), loss='categorical_crossentropy', metrics=['accuracy'])

model.fit_generator(train_path, steps_per_epoch=4, validation_data=valid_batch, validation_steps=3, epochs=5, verbose=2)

Вот мое сообщение об ошибке:

Я заменил пути на ""

Traceback (most recent call last):
  File "", line 191, in <module>
    model.fit_generator(train_path, steps_per_epoch=4, validation_data=valid_batch, validation_steps=3, epochs=5, verbose=2)
  File "y", line 91, in wrapper
    return func(*args, **kwargs)
  File "", line 1732, in fit_generator
    initial_epoch=initial_epoch)
  File "", line 185, in fit_generator
    generator_output = next(output_generator)
  File "", line 742, in get
    six.reraise(*sys.exc_info())
  File "", line 693, in reraise
    raise value
  File "", line 711, in get
    inputs = future.get(timeout=30)
  File "", line 657, in get
    raise self._value
  File "", line 121, in worker
    result = (True, func(*args, **kwds))
  File "", line 650, in next_sample
    return six.next(_SHARED_SEQUENCES[uid])
TypeError: 'PosixPath' object is not an iterator

Может кто-нибудь объяснить мне, что я делаю неправильнопожалуйста? Также, если это не по теме, просто дайте мне знать, где я могу его задать.

Ответы [ 2 ]

0 голосов
/ 11 ноября 2019

Проблема, с которой вы столкнулись, заключается в том, что вы НЕ передаете генератор для обучения, а указываете путь к файлам (вы используете train_path вместо train_batch.

В то время как вам нужно передать генератор для объекта при использовании .fit_generator():

model.fit_generator(train_batch, steps_per_epoch=4, validation_data=valid_batch, validation_steps=3, epochs=5, verbose=2)
0 голосов
/ 11 ноября 2019

Эта строка не обязательна

imgs, labels = next(train_batch)

из документов fit_generator Первый аргумент - это объект-генератор, а не строка, как вы указали. Как это

model.fit_generator(train_path, steps_per_epoch=4, validation_data=valid_batch, validation_steps=3, epochs=5, verbose=2)

...