Практически все туториалы по Tensorflow для начинающих рассчитаны на то, что вы загружаете уже готовый, размеченный dataset и используете его. Но не рассказывается как собрать свой датасет и передать его в модель для обучения, как объяснить какое изображение к какому классу относится, как разделить данные на обучающие и проверочные. Я потратил много времени на то, чтобы разобраться с этой проблемой и теперь хочу помочь другим начинающим дата сайентистам.
Первым делом создаем папку 'train' (назвать можно как вам удобно). В этой папке создаем по отдельной папке для каждого класса, который будет в обучении. Для бинарной классификации будет две папки, для трех классов - три папки и т.д. Папки стоит называть в соответствии с именами классов. Дальше в каждую папку нужно поместить те файлы, на которых будет обучаться нейросеть.
В Tensorflow есть модуль tensorflow.keras.utils.image_dataset_from_directory(), именно с его помощью можно создавать датасет изображений для обучения нейронной сети. Если вы хотите обучать нейронку на текстовых данных, то следует использовать tensorflow.keras.utils.text_dataset_from_directory(). Отмечу, что текстовые данные читаются только из файлов формата '.txt'. Дальше буду рассказывать на примере с изображениями. для текста все будет аналогично.
Модуль tensorflow.keras.utils.image_dataset_from_directory() имеет несколько аргументов, подробнее про каждый можно прочитать в документации к tensorflow, я расскажу про основные, которые сам использую. В первый аргумент 'directory=train' передается путь к той самой папке 'train'. Дальше идет 'validation_split', который отвечает за разделение файлов на обучающую и тестовую выборку. Если не указывать его, то все 100% будут использоваться для обучения, но рекомендую делить датасет в пропорциях 80/20, так обучение будет проходить корректнее. Соответственно в 'validation_split=0.2' указываем процент, который будет отведен на валидацию, а следующим аргументом subset="training" указываем, что это будет тренировочная выборка. Для проверочный выборки subset="validation". Также можно указать параметр 'image_size=(img_height, img_width)', который будет приводить все изображения к одному размеру. Ниже приведу пример, как я создаю тренировочный и проверочный датасеты.
Читать далее