Ошибка деления на ноль в выборке файлов: откуда она там могла появиться?

Реализую на Python в рамках задачи классификации картинок собак и кошек. Алгоритм: он берет из предустановленной базы данных изображения и раскладывает по двум классам. Однако странно, что получаю ошибку в выборке таких файлов:

ZeroDivisionError: integer division or modulo by zero

Код:

# функция-генератор загрузки обучающих данных с диска
# берем по 32 картинки в батче, т.к. в силу объема не можем загрузить их сразу все
def fit_generator(files, batch_size=32):
    """Функция принимает картинки (х) и возвращает 1 и 0 (собака или кот) - это y
    Загружаем картинки для обучения"""
    # выбираем, что меньше: если количество переданных файлов меньше batch_size=32,
    # то за batch_size будет взято число len(files):
    batch_size = min(batch_size, len(files))
    while True:
        shuffle(files)  # перемешиваем файлы 
        # len(files) // batch_size - определяет количество батчей, 
        # на которые поделилось все множество:
        for k in range(len(files) // batch_size): 
            i = k * batch_size  # скажем, второй батч: i=2*32, затем: 3*32 и т.д.
            j = i + batch_size
            if j > len(files):  
                j = - j % len(files) 
            x = np.array([load_image(path) for path in files[i:j]])
            
            y = np.array([1. if os.path.basename(path).startswith('dog') else 0.
                          for path in files[i:j]])
            yield (x, y)

# Компилируем модель и запускаем обучение:

model.compile(optimizer='adam', 
              # binary_crossentropy принимает на вход вероятность 1 и 0: и считает, что вероятней, давая на выход 1 или 0
              loss='binary_crossentropy',  
              metrics=['accuracy'])

# число изображений в валидационной выборке:
val_samples = 5  

shuffle(train_files)  # перемешиваем обучающую выборку
# считываем один батч для валидации
# здесь batch_size = val_samples = 5
validation_data = next(fit_generator(train_files[:val_samples], val_samples))
# считав 1 батч, оставшиеся файлы берем для обучения: 
train_data = fit_generator(train_files[val_samples:])  # данные читаем функцией-генератором

# запускаем процесс обучения
model.fit(train_data,
          steps_per_epoch=10,  # количество вызовов генератора за эпоху
          epochs=100,  # количество эпох обучения
          validation_data=validation_data)

Ответы (1 шт):

Автор решения: ПИТОНИСТ версия-3-8

Деления только два:

1.j = - j % len(files)

2.for k in range(len(files) // batch_size):

Значит либо len(files)=0, либо batch_size=0. Пересмотрите эти переменные / файлы

→ Ссылка