Нейронные сети
May 17, 2021

Обработка и сжатие наборов данных для тренировки нейронных сетей.

Зачастую наборы данных для тренировки нейронных сетей занимают много места. Кроме этого, для использования набора требуется правильная конвертация данных для того чтобы подать данные на вход сети.

В этой статье вы узнаете, как сжимать и обрабатывать наборы данных на примере фото и аудио.

.npz

Формат .npz файла представляет собой сжатый архив файлов, названных в честь переменных, которые они содержат. Архив сжимается, и каждый файл в архиве содержит одну переменную в NumPy формате.

При открытии сохраненного .npz файла с помощью load() возвращается объект. Это объект, подобный словарю, который можно запросить как для своего списка массивов, так и для самих массивов.

Пример

Импортируем функцию для создания .npz архива и генерации чисел. Так же сгенерируем массив.

Указываем имя файла и имя значения в котором будут хранится элементы массива, а так же указываем путь к массиву.

Готово. .npz архив создан.

Рассмотрим как же загрузить из такого архива данные.

Импортируем функцию загрузки.

Указываем имя файла и названия значений.

Готово. Ничего сложного.

MNIST

MNIST – набор рукописных цифр. Сам архив весит около 20 MB, а загрузка данных занимает много времени. Давайте рассмотрим как же завернуть MNIST в .npz архив.

Импортируем нужные функции: для просмтора содержимого дериктории, для отоброжения процесса выполнения, функция для работы с изображениями, а так же некоторые фунцкии NumPy о которых вы узнаете позже.

Создадим фунцкию для преобразования изображений в массив.

Она работает так: инициализируем массив в котором будут хранится все данные, загружаем список папок, после цего загружем список всех файлов в текущей папке, полученное изображение преобразуется в массив, после чего все значения делятся на 255 (так как возвращаются значения от 0 до 255 – яркость пикселя), после всех манипуляций массив добавляется в общий массив и возвражается функцией.

Далее создадим функцию для генерации лейблов.

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

Генерируем массив с числами идущими по порядку, все зависит от количества категорий и примеров.

eye()

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

Указываем путь к файлу и устанавливаем размерность лейблов (категории на кол. примеров).

Далее сохраняем полученные значения в переменную и создаем архив, так же для проверки выведем размерность массива.

Готово. Теперь набор данных весит 15 MB, а вместо конвертации данных и генерации лейблов можно в две строки загрузить данные.

MSC

MSC (mini speech commands) – набор 8-ми голосовых команд от Google. Как и в случае с MNIST импортируем нужные функции: для просмтора содержимого дериктории, для отоброжения процесса выполнения, функция для построения спектограммы, а так же некоторые фунцкии NumPy.

Делаем все как и с MNIST, только вместо конвертации фото в массив, составляем спектограмму.

Лэйблы создаются как и в MNIST, т. к. значения идут по порядку.

Указываем путь к файлу и устанавливаем размерность лейблов.

Сохраняем полученные значения в переменную и создаем архив, так же для проверки выведем размерность массива.

Готово. Вес архива с неконвертированными аудио – 90 MB, вес .npz архива – 13 MB.