2016-07-04 2 views
7

Я пытаюсь переучивать Inception v3 model в тензорном потоке для своих собственных категорий. Я загрузил некоторые данные и отформатировал их в каталогах. Когда я запускаю, сценарий python создает узкие места для изображений, а затем, когда он запускается, на первом этапе обучения (шаг 0) он имеет критическую ошибку, где он пытается по модулю на 0. Он появляется в функции get_image_path при вычислении mod_index, который является индексом% len (category_list), поэтому category_list должен быть 0 правильным?CRITICAL: tensorflow: Категория не имеет изображений - валидация

Почему это происходит и как я могу его предотвратить?

EDIT: Вот точный код я вижу внутри докер

2016-07-04 01:27:52.005912: Step 0: Train accuracy = 40.0% 
2016-07-04 01:27:52.006025: Step 0: Cross entropy = 1.109777 
CRITICAL:tensorflow:Category has no images - validation. 
Traceback (most recent call last): 
    File "tensorflow/examples/image_retraining/retrain.py", line 824, in <module> 
    tf.app.run() 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/platform/app.py", line 30, in run 
    sys.exit(main(sys.argv)) 
    File "tensorflow/examples/image_retraining/retrain.py", line 794, in main 
    bottleneck_tensor)) 
    File "tensorflow/examples/image_retraining/retrain.py", line 484, in get_random_cached_bottlenecks 
    bottleneck_tensor) 
    File "tensorflow/examples/image_retraining/retrain.py", line 392, in get_or_create_bottleneck 
    bottleneck_dir, category) 
    File "tensorflow/examples/image_retraining/retrain.py", line 281, in get_bottleneck_path 
    category) + '.txt' 
    File "tensorflow/examples/image_retraining/retrain.py", line 257, in get_image_path 
    mod_index = index % len(category_list) 
ZeroDivisionError: integer division or modulo by zero 

ответ

10

Fix:

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

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

Причина:

Для каждой метки (суб папки), tensorflow пытается создать 3 категории изображений (поезд, испытания и валидации) и помещает изображения под ним на основе значения вероятности (рассчитывается с использованием хэш названия ярлыка).

Изображение помещается в папку категории только в том случае, если значение вероятности меньше размера категории (Поезд, проверка или проверка).

Теперь, если количество изображений внутри метки меньше (скажем, 25), тогда размер проверки вычисляется как 10 (по умолчанию), а значение вероятности обычно больше 10 и, следовательно, изображение не помещается в набор проверки.

Позже, когда все узкие места создаются и ТФ пытается вычислить точность проверки, то первым бросает фатальное сообщение журнала:

ВАЖНАЯ: tensorflow: Категория не имеет изображения - проверка.

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

+0

Спасибо за пояснения. Я не понимаю, что вы подразумеваете под «Изображение помещено, если значение вероятности меньше размера категории (Поезд, Тест или проверка)». хоть. Поскольку все изображения помечены, не будет ли TF просто выделять часть изображений для обучения, тестирования и проверки? – DarylWM

+1

Извините, я имею в виду, изображение помещается в один из Поезда, тест или валидацию, основанный на значении вероятности. –

+0

Я отредактировал свой ответ, чтобы отразить это. Кстати, если объяснение удовлетворяет ответ, можете ли вы отметить, что у него есть ответ? –

1

Для меня эта ошибка возникла из-за наличия в каталоге обучения папок, в которых не было изображений. Я следовал тому же учебнику «Поэты» и закончил размещение каталогов с подкаталогами в каталоге изображений. Как только я удалил их и разместил только каталоги с изображениями непосредственно в них (без поддиректориев), ошибка больше не возникала, и я смог успешно обучить свою модель.

2

Я пытался тренироваться, используя свой собственный набор изображений (фотографии собак вместо цветов), и столкнулся с этой проблемой.

Я понял, что проблема в том, что имена моих папок (имена категорий) не присутствовали в файле imagenet_synset_to_human_label_map.txt, который загружается в исходные данные, которые мы модифицируем.

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

3
  1. Это происходит, если у вас слишком мало изображений. Как предположил Эшвин, есть как минимум 30 изображений.

  2. Также важны имена вашей папки. Как-то у вашего имени папки не может быть символ подчеркивания (_)

например. Эти имена не работали: dettol_bottle, dettol_soap, dove_soap, lifebuoy_bottle

Эти имена работали: dettolbottle, dettolsoap, dovesoap, lifebuoybottle

1

Для меня это было "-" в моих имен папок. В тот момент, когда я исправил его, ошибка исчезла.

5

У меня была такая же проблема при запуске retrain.py и когда я неправильно задал аргумент -model_dir, а созданный каталог был создан в каталоге flower_photos.

Проверьте, есть ли в каталоге flower_photos какие-либо каталоги без каких-либо изображений.

+0

У меня была эта точная ошибка, и это была точная (правильная) причина, по которой у меня была ошибка. – simusid

+1

Этот ответ относится к аналогичной проблеме с очень похожим описанием ошибки, но не для одного из вопроса выше. Это то, что я получил, и исправил его с помощью решения @Praveen: 'CRITICAL: tensorflow: В начале Label нет изображений в категории validation.' Поэтому я поместил папку с исходными текстами в папку с изображениями, что было неправильно. Во всяком случае +1 для меня. – denys

0

Я также хотел бы, чтобы добавить свой собственный опыт:

Не пробелы Для меня, он работал, когда все имя папки, содержащиеся была до г символов, без пробелов, без каких-либо символов, нет ничего.

E.g "Я папка" не так. Однако «imAFolder» будет работать.

0

Как ответил Ашвин Патти, существует вероятность того, что в каталоге разделов для проверки нет изображений из-за отсутствия изображений в исходной директории меток.

Это объяснение подтверждается предупреждением при попытке переквалифицировать с этикетками, которые имеют менее 20 изображений:

ВНИМАНИЕ: Папка имеет менее 20 изображений, которые могут вызвать проблемы.

1

Я изменил retrain.py, чтобы гарантировать, что по крайней мере, есть изображение в проверке (строка 201)

if len(validation_images) == 0: 
    validation_images.append(base_name) 
elif percentage_hash < validation_percentage: 
+0

отлично, спасибо !!! –

Смежные вопросы