Este é um módulo python para experimentar diferentes algoritmos de aprendizagem ativa. Existem alguns componentes principais para executar experimentos de aprendizagem ativa:
O script principal do experimento é run_experiment.py
com muitos sinalizadores para diferentes opções de execução.
Os conjuntos de dados suportados podem ser baixados para um diretório especificado executando utils/create_data.py
.
Os métodos de aprendizagem ativos suportados estão em sampling_methods
.
Abaixo entrarei em cada componente com mais detalhes.
AVISO LEGAL: Este não é um produto oficial do Google.
As dependências estão em requirements.txt
. Certifique-se de que esses pacotes estejam instalados antes de executar experimentos. Se desejar tensorflow
compatível com GPU, siga as instruções aqui.
É altamente recomendável que você instale todas as dependências em um virtualenv
separado para facilitar o gerenciamento de pacotes.
Por padrão, os conjuntos de dados são salvos em /tmp/data
. Você pode especificar outro diretório através do sinalizador --save_dir
.
Baixar novamente todos os conjuntos de dados consumirá muito tempo, portanto, seja paciente. Você pode especificar um subconjunto de dados para download, passando uma sequência de conjuntos de dados separados por vírgula por meio do sinalizador --datasets
.
Existem alguns sinalizadores principais para run_experiment.py
:
dataset
: nome do conjunto de dados, deve corresponder ao nome de salvamento usado em create_data.py
. Também deve existir no data_dir.
sampling_method
: método de aprendizagem ativo a ser usado. Deve ser especificado em sampling_methods/constants.py
.
warmstart_size
: lote inicial de exemplos amostrados uniformemente para usar como dados iniciais. Float indica a porcentagem do total de dados de treinamento e inteiro indica o tamanho bruto.
batch_size
: número de pontos de dados a serem solicitados em cada lote. Float indica a porcentagem do total de dados de treinamento e inteiro indica o tamanho bruto.
score_method
: modelo a ser usado para avaliar o desempenho do método de amostragem. Deve estar no método get_model
de utils/utils.py
.
data_dir
: diretório com conjuntos de dados salvos.
save_dir
: diretório para salvar os resultados.
Este é apenas um subconjunto de todos os sinalizadores. Existem também opções para pré-processamento, introdução de ruído de rotulagem, subamostragem de conjunto de dados e uso de um modelo diferente para selecionar aquele para pontuar/avaliar.
Todos os métodos de aprendizagem ativos nomeados estão em sampling_methods/constants.py
.
Você também pode especificar uma combinação de métodos de aprendizagem ativos seguindo o padrão [sampling_method]-[mixture_weight]
separados por traços; ou seja, mixture_of_samplers-margin-0.33-informative_diverse-0.33-uniform-0.34
.
Alguns métodos de amostragem suportados incluem:
Uniforme: as amostras são selecionadas por meio de amostragem uniforme.
Margem: método de amostragem baseado na incerteza.
Informativo e diversificado: método de amostragem baseado em margem e conglomerado.
k-centro ganancioso: estratégia representativa que forma avidamente um lote de pontos para minimizar a distância máxima de um ponto rotulado.
Densidade gráfica: estratégia representativa que seleciona pontos em regiões densas do pool.
Bandido Exp3: método de aprendizagem metaativo que tenta aprender o método de amostragem ideal usando um algoritmo popular de bandido multi-armado.
Implemente um amostrador base que herde de SamplingMethod
ou um meta-amostrador que chame amostradores base que herde de WrapperSamplingMethod
.
O único método que deve ser implementado por qualquer amostrador é select_batch_
, que pode ter argumentos nomeados arbitrariamente. A única restrição é que o nome da mesma entrada deve ser consistente em todos os amostradores (ou seja, todos os índices para exemplos já selecionados têm o mesmo nome em todos os amostradores). Adicionar um novo argumento nomeado que não tenha sido usado em outros métodos de amostragem exigirá alimentá-lo na chamada select_batch
em run_experiment.py
.
Depois de implementar seu amostrador, certifique-se de adicioná-lo a constants.py
para que possa ser chamado de run_experiment.py
.
Todos os modelos disponíveis estão no método get_model
de utils/utils.py
.
Métodos suportados:
SVM linear: método scikit com wrapper de pesquisa em grade para parâmetro de regularização.
Kernel SVM: método scikit com wrapper de pesquisa em grade para parâmetro de regularização.
Regressão Logística: método scikit com wrapper de pesquisa em grade para parâmetro de regularização.
CNN pequena: CNN de 4 camadas otimizada usando rmsprop implementado em Keras com backend tensorflow.
Classificação de mínimos quadrados do kernel: solucionador descientista de gradiente de bloco que pode usar vários núcleos, portanto, geralmente é mais rápido que o scikit Kernel SVM.
Novos modelos devem seguir a API scikit learn e implementar os seguintes métodos
fit(X, y[, sample_weight])
: ajusta o modelo aos recursos de entrada e ao destino.
predict(X)
: prever o valor dos recursos de entrada.
score(X, y)
: retorna a métrica alvo, dados os recursos de teste e os alvos de teste.
decision_function(X)
(opcional): probabilidades de classe de retorno, distância até os limites de decisão ou outra métrica que pode ser usada pelo amostrador de margem como medida de incerteza.
Veja small_cnn.py
para ver um exemplo.
Depois de implementar seu novo modelo, certifique-se de adicioná-lo ao método get_model
de utils/utils.py
.
Atualmente, os modelos devem ser adicionados uma única vez e nem todos os classificadores scikit-learn são suportados devido à necessidade de entrada do usuário sobre se e como ajustar os hiperparâmetros do modelo. No entanto, é muito fácil adicionar um modelo scikit-learn com pesquisa de hiperparâmetros enrolado como um modelo suportado.
O script utils/chart_data.py
lida com o processamento de dados e gráficos para um conjunto de dados e diretório de origem especificados.