#tensorflow #keras #tf.keras
Вопрос:
введите описание изображения здесь
введите описание изображения здесь
У меня возникли проблемы с загрузкой изображений с помощью DataGenerator. Это не похоже на мой настоящий путь, как вы можете видеть на изображениях. Это должно быть похоже на img(1), img(2), … но img(1), img(10), img(100), …
Как я могу это решить ? Заранее спасибо.
Ответ №1:
Причина, по которой порядок НЕ соответствует ожидаемому, заключается в том, что генератор обрабатывает изображения в алфавитно-цифровом порядке. Например, если ваши изображения помечены 1.jpg, 2.jpg, …9.jpg, 10.jpg, 11.jpg …и т.д. Они будут обработаны в заказе 1.jpg, 10,jpg,11.jpg, и т.д., 2.jpg,20.jpg и т.д. Один из способов сохранить порядок-назвать файлы с помощью заполнения «нулями». Например, если у вас 20 файлов, пометьте их как 01.jpg, 02.jpg, и т. д 09.jpg, 10.jpg и т.д. Имейте в виду, что если вы используете flow_from_directory, каталоги классов также обрабатываются в алфавитно-цифровом порядке. Ниже приведен код функции, которая будет переименовывать все файлы в каталоге (source_dir) численно, начиная с целого значения (snum) с соответствующим заполнением «нулями».
def rename (source_dir, snum, ):
import os
import shutil
flist=os.listdir(source_dir)
temp_dir=os.path.join(source_dir, 'temp')
if os.path.isdir(temp_dir):
shutil.rmtree(temp_dir)
os.mkdir(temp_dir)
for f in flist:
fpath=os.path.join(source_dir,f)
dpath=os.path.join(temp_dir,f)
shutil.copy(fpath, dpath)
tlist=os.listdir(temp_dir)
for f in tlist:
fpath=os.path.join(source_dir,f)
os.remove(fpath)
tlist=os.listdir(temp_dir)
fc=len(tlist) # determine number of d files to process which determines amout of zeros padding needed
pad=0
mod = 10
for i in range(1, fc 1): # skip i=0 because 0 modulo anything is 0 and we don't want to increment pad
if i % mod == 0:
pad=pad 1
mod =mod * 10
for i,f in enumerate(tlist):
fpath=os.path.join(temp_dir,f) #full path to the file
index=fpath.rfind('.') # find location of last . in file name
new_path=os.path.join(source_dir, str(i snum).zfill(pad 1) fpath[index :] )
shutil.copy(fpath, new_path)
shutil.rmtree(temp_dir)