您想構建一個沒有太多訓練數據的機器學習模型嗎?眾所周知,機器學習需要大量數據,而收集和注釋數據需要時間且成本高昂(點擊文末“閱讀原文”獲取完整代碼數據)。
本文介紹了一些在沒有太多數據或標記數據的情況下進行圖像分類的方法。我將介紹遷移學習、自監(jiān)督學習的最重要方面。
視頻
與標記數據相比,未標記的數據通常更容易訪問。不利用這一點就是一種浪費!
自監(jiān)督學習解決了從未標記的數據中學習深度特征的問題。訓練自監(jiān)督模型后,特征提取器可以像在遷移學習中一樣使用,因此您仍然需要一些帶注釋的數據來進行微調。
那么,如何從未標記的數據中訓練深度特征提取器呢?總而言之,您需要一個足夠困難的代理任務(Pretext Task),使您能夠學習分類任務的有趣特征。
如果你想在不玩實際比賽的情況下贏得足球比賽,例如,你可以盡可能多地訓練雜技球。雜技球將提高您的控球技術,這在玩游戲時會派上用場。
代理任務的一個例子是預測圖像的旋轉角度?;旧?,對于每個圖像,您應用旋轉 z 來獲取旋轉的圖像 x。然后,你訓練一個神經網絡來預測 x 中的 z 。 此轉換預測任務會強制您的網絡深入了解您的數據。事實上,要預測狗圖像的旋轉,您的網絡首先需要了解圖像中有一只狗,并且狗應該以特定的方式定向。
根據特定目標,代理任務可能會有很大差異。常用的代理任務包括:
轉換預測:數據集中的樣本由轉換修改,您的網絡將學習預測轉換。
屏蔽預測:輸入圖像的隨機方塊被屏蔽,網絡必須預測圖像的屏蔽部分。
實例區(qū)分:了解區(qū)分所有數據樣本的表示形式。例如,每個數據點都可以被視為一個類,并且可以在此任務上訓練分類器。
當您從頭開始訓練深度神經網絡時,您通常會隨機初始化權重。這是初始化神經網絡的最佳方法嗎?答案通常是否定的。
首先,深度學習是關于表征的。在經典機器學習中,特征需要手動制作。深度學習背后的想法是,你讓你的神經網絡在訓練時自己學習特征表示。
在神經網絡的每一層之間,您有一個輸入數據的表示形式。你越深入你的神經網絡,你的表示應該越全局化。通常,已知分類器神經網絡的第一層能夠檢測顏色和形狀。中間層將第一層表示作為輸入,以計算比第一層更復雜的概念。例如,他們可能會檢測到蘋果葉或枝干的存在。最后一層給出了圖像來自每個類的概率。
遷移學習背后的想法是,從另一個分類任務中學習的一些表示可能對您的任務有用。遷移學習是關于在另一項任務上獲取預訓練網絡的第一層,在其上添加新層,并在感興趣的數據集上微調整個網絡。
點擊標題查閱往期內容
左右滑動查看更多
01
02
03
04
作為比較,如果你的目標是學習贏得足球比賽,那么遷移學習將包括先學習打籃球,習慣移動你的身體,鍛煉你的耐力等,然后再開始玩足球比賽。
它將如何影響最終網絡的性能?您應該在哪里切斷預先訓練的網絡?這些問題在中得到了廣泛的解決。
總結最重要的想法:
神經網絡的第一層是非常通用的,而最深的層是預訓練任務中最專業(yè)的。因此,您可以預期,如果您的預訓練任務接近目標任務,那么保留更多層將更有益。
在中間層切割通常會導致性能不佳。這是由于通過微調在中間層中達到的脆弱平衡。
使用預先訓練的權重總是比使用隨機初始化的權重更好。這是因為通過先訓練另一個任務,你的模型學會了它本來不會學到的特征。
當重新訓練這些預先訓練的權重時,可以獲得更好的表現——最終對它們使用較低的學習率。
R語言深度學習卷積神經網絡 (CNN)對 CIFAR 圖像進行分類:訓練與結果評估可視化
library(keras)
CIFAR10 數據集包含 10 個類別的 60,000 張彩色圖像,每個類別有 6,000 張圖像。數據集分為 50,000 張訓練圖像和 10,000 張測試圖像。這些類是互斥的,它們之間沒有重疊。
為了驗證數據集看起來是否正確,讓我們繪制訓練集中的前 25 張圖像并在每張圖像下方顯示類別名稱。
train %>%
map(as.rater, max = 255) %>%
下面的6行代碼使用一種常見的模式定義了卷積基礎:Conv2D和MaxPooling2D層的堆疊。
作為輸入,CNN接受形狀的張量(image\_height, image\_width, color\_channels),忽略了批次大小。如果你是第一次接觸這些維度,color\_channels指的是(R,G,B)。在這個例子中,你將配置我們的CNN來處理形狀為(32,32,3)的輸入,這是CIFAR圖像的格式。你可以通過將參數input_shape傳遞給我們的第一層來做到這一點。
kers\_moe\_etl %>%
laer\_c\_2d(fles = 32, ene_sz = c(3,3), acan = "relu",
lye\_apoi\_2d(posize = c(2,2)) %>%
lae\_cv\_2d(filrs = 64, relze = c(3,3), ctitio = "reu")
到目前為止,讓我們展示一下我們模型的架構。
summary(model)