這是一個用於試驗不同主動學習演算法的 python 模組。運行主動學習實驗有幾個關鍵組成部分:
主要實驗腳本是run_experiment.py
其中包含許多用於不同運行選項的標誌。
可以透過執行utils/create_data.py
將支援的資料集下載到指定目錄。
支援的主動學習方法位於sampling_methods
中。
下面我將更詳細地介紹每個組件。
免責聲明:這不是 Google 官方產品。
依賴項位於requirements.txt
中。 請確保在運行實驗之前安裝這些軟體包。 如果需要支援 GPU 的張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
:用於評估採樣方法效能的模型。必須位於utils/utils.py
的get_model
方法中。
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 bandit:元主動學習方法,嘗試使用流行的多臂老虎機演算法來學習最佳取樣方法。
實作繼承自SamplingMethod
的基本採樣器或呼叫繼承自WrapperSamplingMethod
的基本採樣器的元採樣器。
任何採樣器必須實作的唯一方法是select_batch_
,它可以具有任意命名參數。唯一的限制是相同輸入的名稱必須在所有採樣器中保持一致(即已選定範例的索引在採樣器中都具有相同的名稱)。新增尚未在其他取樣方法中使用的新命名參數需要將其輸入到run_experiment.py
中的select_batch
呼叫中。
實作採樣器後,請務必將其新增至constants.py
以便可以從run_experiment.py
呼叫它。
所有可用的模型都在utils/utils.py
的get_model
方法中。
支持的方法:
線性 SVM:具有網格搜尋包裝器的 scikit 方法,用於正規化參數。
核心 SVM:具有網格搜尋包裝器的 scikit 方法,用於正規化參數。
Logistc 迴歸:具有網格搜尋包裝器的 scikit 方法,用於正規化參數。
小型 CNN:使用 rmsprop 優化的 4 層 CNN,在 Keras 中實現,具有張量流後端。
內核最小二乘分類:區塊梯度下降求解器,可以使用多個內核,因此通常比 scikit 內核 SVM 更快。
新模型必須遵循 scikit learn api 並實現以下方法
fit(X, y[, sample_weight])
:將模型擬合到輸入特徵和目標。
predict(X)
:預測輸入特徵的值。
score(X, y)
:傳回給定測試特徵和測試目標的目標指標。
decision_function(X)
(可選):傳回類別機率、到決策邊界的距離或可被邊際採樣器用作不確定性度量的其他度量。
有關範例,請參閱small_cnn.py
。
實作新模型後,請務必將其新增至utils/utils.py
的get_model
方法。
目前,模型必須一次性添加,並且由於需要使用者輸入是否以及如何調整模型的超參數,因此並非所有 scikit-learn 分類器都支援。然而,添加帶有超參數搜尋作為支援模型的 scikit-learn 模型非常容易。
utils/chart_data.py
腳本處理指定資料集和來源目錄的資料和圖表。