Este es un módulo de Python para experimentar con diferentes algoritmos de aprendizaje activo. Hay algunos componentes clave para ejecutar experimentos de aprendizaje activo:
El script del experimento principal es run_experiment.py
con muchos indicadores para diferentes opciones de ejecución.
Los conjuntos de datos compatibles se pueden descargar a un directorio específico ejecutando utils/create_data.py
.
Los métodos de aprendizaje activo admitidos se encuentran en sampling_methods
.
A continuación entraré en cada componente con más detalle.
DESCARGO DE RESPONSABILIDAD: Este no es un producto oficial de Google.
Las dependencias están en requirements.txt
. Asegúrese de que estos paquetes estén instalados antes de ejecutar experimentos. Si desea tensorflow
con capacidad para GPU, siga las instrucciones aquí.
Se recomienda encarecidamente que instale todas las dependencias en un virtualenv
independiente para facilitar la gestión de paquetes.
De forma predeterminada, los conjuntos de datos se guardan en /tmp/data
. Puede especificar otro directorio mediante el indicador --save_dir
.
Volver a descargar todos los conjuntos de datos llevará mucho tiempo, así que tenga paciencia. Puede especificar un subconjunto de datos para descargar pasando una cadena de conjuntos de datos separados por comas a través del indicador --datasets
.
Hay algunas banderas clave para run_experiment.py
:
dataset
: nombre del conjunto de datos, debe coincidir con el nombre guardado utilizado en create_data.py
. También debe existir en data_dir.
sampling_method
: método de aprendizaje activo a utilizar. Debe especificarse en sampling_methods/constants.py
.
warmstart_size
: lote inicial de ejemplos muestreados uniformemente para utilizarlos como datos iniciales. El valor flotante indica el porcentaje de los datos de entrenamiento totales y el número entero indica el tamaño sin procesar.
batch_size
: número de puntos de datos para solicitar en cada lote. El valor flotante indica el porcentaje de los datos de entrenamiento totales y el número entero indica el tamaño sin procesar.
score_method
: modelo a utilizar para evaluar el rendimiento del método de muestreo. Debe estar en el método get_model
de utils/utils.py
.
data_dir
: directorio con conjuntos de datos guardados.
save_dir
: directorio para guardar los resultados.
Este es sólo un subconjunto de todas las banderas. También hay opciones para el preprocesamiento, la introducción de ruido de etiquetado, el submuestreo de conjuntos de datos y el uso de un modelo diferente para seleccionar que para calificar/evaluar.
Todos los métodos de aprendizaje activo nombrados se encuentran en sampling_methods/constants.py
.
También puede especificar una combinación de métodos de aprendizaje activo siguiendo el patrón de [sampling_method]-[mixture_weight]
separados por guiones; es decir, mixture_of_samplers-margin-0.33-informative_diverse-0.33-uniform-0.34
.
Algunos métodos de muestreo admitidos incluyen:
Uniforme: las muestras se seleccionan mediante muestreo uniforme.
Margen: método de muestreo basado en la incertidumbre.
Informativo y diverso: método de muestreo basado en márgenes y conglomerados.
k-center codicioso: estrategia representativa que forma con avidez un lote de puntos para minimizar la distancia máxima desde un punto etiquetado.
Densidad del gráfico: estrategia representativa que selecciona puntos en regiones densas del pool.
Exp3 bandit: método de aprendizaje metaactivo que intenta aprender el método de muestreo óptimo utilizando un popular algoritmo bandido de múltiples brazos.
Implemente un muestreador base que herede de SamplingMethod
o un metamuestreador que llame a muestreadores base que herede de WrapperSamplingMethod
.
El único método que debe implementar cualquier muestreador es select_batch_
, que puede tener argumentos con nombres arbitrarios. La única restricción es que el nombre de la misma entrada debe ser coherente en todos los muestreadores (es decir, todos los índices de los ejemplos ya seleccionados tienen el mismo nombre en todos los muestreadores). Agregar un nuevo argumento con nombre que no se haya utilizado en otros métodos de muestreo requerirá introducirlo en la llamada select_batch
en run_experiment.py
.
Después de implementar su muestra, asegúrese de agregarla a constants.py
para que pueda llamarse desde run_experiment.py
.
Todos los modelos disponibles están en el método get_model
de utils/utils.py
.
Métodos admitidos:
SVM lineal: método scikit con contenedor de búsqueda de cuadrícula para el parámetro de regularización.
Kernel SVM: método scikit con contenedor de búsqueda de cuadrícula para el parámetro de regularización.
Regresión logística: método scikit con contenedor de búsqueda de cuadrícula para el parámetro de regularización.
CNN pequeña: CNN de 4 capas optimizada usando rmsprop implementado en Keras con backend de tensorflow.
Clasificación de mínimos cuadrados del kernel: solucionador de gradiente de bloques que puede usar múltiples núcleos, por lo que suele ser más rápido que scikit Kernel SVM.
Los nuevos modelos deben seguir la API de aprendizaje de scikit e implementar los siguientes métodos
fit(X, y[, sample_weight])
: ajusta el modelo a las características de entrada y al objetivo.
predict(X)
: predice el valor de las características de entrada.
score(X, y)
: devuelve la métrica objetivo dadas las características de prueba y los objetivos de prueba.
decision_function(X)
(opcional): probabilidades de clase de retorno, distancia a los límites de decisión u otra métrica que el muestreador de margen pueda utilizar como medida de incertidumbre.
Consulte small_cnn.py
para ver un ejemplo.
Después de implementar su nuevo modelo, asegúrese de agregarlo al método get_model
de utils/utils.py
.
Actualmente, los modelos deben agregarse de forma única y no todos los clasificadores de scikit-learn son compatibles debido a la necesidad de información del usuario sobre si ajustar los hiperparámetros del modelo y cómo hacerlo. Sin embargo, es muy fácil agregar un modelo scikit-learn con búsqueda de hiperparámetros incluido como modelo compatible.
El script utils/chart_data.py
maneja el procesamiento de datos y gráficos para un conjunto de datos y un directorio de origen específicos.