Как отслеживать прогресс ваших экспериментов с машинным обучением

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

Я делю это руководство на две части. Сначала я представлю tqdm,, а затем покажу пример машинного обучения. Для каждого фрагмента кода в этой статье мы импортируем функцию sleep из библиотеки Python time, поскольку это позволит нам замедлить работу программы и увидеть обновление индикатора выполнения.

from time import sleep

Tqdm

Вы можете установить tqdm с pip install tqdm. Библиотека поставляется с различными итераторами, каждый из которых предназначен для определенного использования, которое я собираюсь представить.

tqdm - итератор по умолчанию. Он принимает объект-итератор в качестве аргумента и отображает индикатор выполнения по мере его итерации.

Выход

100%|█████████████████████████████████| 5/5 [00:00<00:00, 9.90it/s]

Вы можете увидеть хороший результат с 9.90it/s, что означает среднюю скорость 9,90 итераций в секунду. 'it' для итераций можно настроить на что-то другое, и это мы увидим в следующем примере.

trange следует тому же шаблону, что и range в Python. Например, присвойте trange количество итераций.

Proving P=NP: 100%|████████████| 20/20 [00:02<00:00, 9.91carrots/s]

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

Обновить индикатор выполнения во время выполнения

tqdm имеет два метода, которые могут обновлять то, что отображается на индикаторе выполнения.

Чтобы использовать эти методы, нам нужно присвоить переменной tqdm итератор. Это можно сделать с помощью оператора = или ключевого слова with в Python.

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

А вот наш код с индикатором выполнения.

Если вы чувствуете себя выдающимся программистом на Python, вы можете использовать ключевое слово with так:

Использование with автоматически вызовет pbar.close() в конце блока.

Вот статус, отображаемый на i=6.

Testing even number 6: 70%|██████████████▋ | 7/10 [00:03<00:01, 1.76carrots/s, divisors=[1, 2, 3]]

Отслеживание потерь и точности

В этом разделе мы используем нейронную сеть, написанную на PyTorch, и обучаем ее с помощью tqdm для отображения потерь и точности. Вот модель

Это простая модель персептрона, которую мы можем использовать для обработки и классификации изображений цифр из набора данных MNIST. Следующий код для загрузки набора данных MNIST основан на примере PyTorch.

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

Я снова использую функцию sleep, чтобы приостановить программу, чтобы мы могли видеть обновление индикатора выполнения. Как видите, мы просто применили то, что узнали здесь ранее, в частности, с tepoch.set_postfix и tepoch.set_description, которые позволяют обновлять информацию, отображаемую на индикаторе выполнения. Вот снимок вывода во время работы программы.

Epoch 1: 15%|▉ | 142/937 [00:16<01:32, 8.56batch/s, accuracy=89.1, loss=0.341]

Это дает нам представление о том, как tqdm можно использовать на практике.

Вывод

Вы можете добиться гораздо большего с tqdm, например адаптировать его к блокнотам Jupyter, точно настроить обновления индикатора выполнения или вложить индикаторы выполнения, поэтому я рекомендую вам прочитать документацию для получения дополнительной информации: https://github.com/tqdm/tqdm

Спасибо за чтение!

Первоначально опубликовано на https://adamoudad.github.io 12 октября 2020 г.