Это модуль Python для экспериментов с различными алгоритмами активного обучения. Есть несколько ключевых компонентов проведения экспериментов по активному обучению:
Основной сценарий эксперимента — run_experiment.py
со множеством флагов для различных вариантов запуска.
Поддерживаемые наборы данных можно загрузить в указанный каталог, запустив utils/create_data.py
.
Поддерживаемые методы активного обучения находятся в sampling_methods
.
Ниже я остановлюсь на каждом компоненте более подробно.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Это не официальный продукт Google.
Зависимости находятся в файле requirements.txt
. Перед запуском экспериментов убедитесь, что эти пакеты установлены. Если требуется tensorflow
с поддержкой графического процессора, следуйте инструкциям здесь.
Настоятельно рекомендуется установить все зависимости в отдельную virtualenv
для упрощения управления пакетами.
По умолчанию наборы данных сохраняются в /tmp/data
. Вы можете указать другой каталог с помощью флага --save_dir
.
Повторная загрузка всех наборов данных займет очень много времени, поэтому наберитесь терпения. Вы можете указать подмножество данных для загрузки, передав строку наборов данных, разделенную запятыми, с помощью флага --datasets
.
Есть несколько ключевых флагов для run_experiment.py
:
dataset
: имя набора данных, должно совпадать с именем сохранения, используемым в create_data.py
. Также должен существовать в data_dir.
sampling_method
: используемый метод активного обучения. Должно быть указано в sampling_methods/constants.py
.
warmstart_size
: начальный пакет примеров с единой выборкой для использования в качестве исходных данных. Число с плавающей запятой указывает процент от общего объема обучающих данных, а целое число указывает на необработанный размер.
batch_size
: количество точек данных, которые необходимо запросить в каждом пакете. Число с плавающей запятой указывает процент от общего объема обучающих данных, а целое число указывает на необработанный размер.
score_method
: модель, используемая для оценки эффективности метода выборки. Должно быть в методе get_model
файла utils/utils.py
.
data_dir
: каталог с сохраненными наборами данных.
save_dir
: каталог для сохранения результатов.
Это лишь часть всех флагов. Существуют также варианты предварительной обработки, введения шума маркировки, субдискретизации набора данных и использования другой модели для выбора, чем для оценки/оценки.
Все названные методы активного обучения находятся в sampling_methods/constants.py
.
Вы также можете указать сочетание активных методов обучения, следуя шаблону [sampling_method]-[mixture_weight]
разделенных дефисами; т.е. mixture_of_samplers-margin-0.33-informative_diverse-0.33-uniform-0.34
.
Некоторые поддерживаемые методы выборки включают в себя:
Равномерность: выборки отбираются посредством единой выборки.
Маржа: метод выборки, основанный на неопределенности.
Информативен и разнообразен: метод выборки на основе маржи и кластера.
жадный k-центр: репрезентативная стратегия, которая жадно формирует пакет точек, чтобы минимизировать максимальное расстояние от помеченной точки.
Плотность графа: репрезентативная стратегия, которая выбирает точки в плотных областях пула.
Бандит Exp3: метод метаактивного обучения, который пытается изучить оптимальный метод выборки с использованием популярного алгоритма многорукого бандита.
Реализуйте либо базовый сэмплер, наследуемый от SamplingMethod
, либо мета-сэмплер, вызывающий базовые сэмплеры, наследуемые от WrapperSamplingMethod
.
Единственный метод, который должен быть реализован любым сэмплером, — это select_batch_
, который может иметь произвольные именованные аргументы. Единственное ограничение заключается в том, что имя одного и того же входа должно быть одинаковым для всех сэмплеров (т. е. все индексы для уже выбранных примеров имеют одно и то же имя во всех сэмплерах). Добавление нового именованного аргумента, который не использовался в других методах выборки, потребует передачи его в вызов select_batch
в run_experiment.py
.
После реализации сэмплера обязательно добавьте его в constants.py
, чтобы его можно было вызывать из run_experiment.py
.
Все доступные модели находятся в методе get_model
файла utils/utils.py
.
Поддерживаемые методы:
Линейный SVM: метод scikit с оболочкой поиска по сетке для параметра регуляризации.
Ядро SVM: метод scikit с оболочкой поиска по сетке для параметра регуляризации.
Логистическая регрессия: метод scikit с оболочкой поиска по сетке для параметра регуляризации.
Малая CNN: 4-слойная CNN, оптимизированная с использованием rmsprop, реализованного в Keras с бэкэндом tensorflow.
Классификация методом наименьших квадратов ядра: решатель блочного градиента, который может использовать несколько ядер, поэтому часто работает быстрее, чем scikit Kernel SVM.
Новые модели должны следовать API scikit Learn и реализовывать следующие методы.
fit(X, y[, sample_weight])
: подогнать модель под входные объекты и цель.
predict(X)
: предсказать значение входных функций.
score(X, y)
: возвращает целевую метрику с учетом функций теста и целей теста.
decision_function(X)
(необязательно): вероятности возвращаемого класса, расстояние до границ решения или другая метрика, которая может использоваться устройством выборки полей в качестве меры неопределенности.
См. пример small_cnn.py
.
После реализации новой модели обязательно добавьте ее в метод get_model
файла utils/utils.py
.
В настоящее время модели необходимо добавлять разово, и не все классификаторы scikit-learn поддерживаются из-за необходимости ввода пользователем информации о том, нужно ли и как настраивать гиперпараметры модели. Однако очень легко добавить модель scikit-learn с поиском по гиперпараметрам, завернутую в поддерживаемую модель.
Скрипт utils/chart_data.py
обрабатывает данные и строит диаграммы для указанного набора данных и исходного каталога.