遷移學(xué)習(xí)、自監(jiān)督學(xué)習(xí)理論小樣本圖像分類和R語言CNN深度學(xué)習(xí)卷積神經(jīng)網(wǎng)絡(luò)實(shí)例
全文鏈接:http://tecdat.cn/?p=30793
原文出處:拓端數(shù)據(jù)部落公眾號(hào)
您想構(gòu)建一個(gè)沒有太多訓(xùn)練數(shù)據(jù)的機(jī)器學(xué)習(xí)模型嗎?眾所周知,機(jī)器學(xué)習(xí)需要大量數(shù)據(jù),而收集和注釋數(shù)據(jù)需要時(shí)間且成本高昂。
本文介紹了一些在沒有太多數(shù)據(jù)或標(biāo)記數(shù)據(jù)的情況下進(jìn)行圖像分類的方法。我將介紹遷移學(xué)習(xí)、自監(jiān)督學(xué)習(xí)的最重要方面。
利用未標(biāo)記的數(shù)據(jù)
與標(biāo)記數(shù)據(jù)相比,未標(biāo)記的數(shù)據(jù)通常更容易訪問。不利用這一點(diǎn)就是一種浪費(fèi)!

自我監(jiān)督學(xué)習(xí)
自監(jiān)督學(xué)習(xí)解決了從未標(biāo)記的數(shù)據(jù)中學(xué)習(xí)深度特征的問題。訓(xùn)練自監(jiān)督模型后,特征提取器可以像在遷移學(xué)習(xí)中一樣使用,因此您仍然需要一些帶注釋的數(shù)據(jù)來進(jìn)行微調(diào)。
那么,如何從未標(biāo)記的數(shù)據(jù)中訓(xùn)練深度特征提取器呢?總而言之,您需要一個(gè)足夠困難的代理任務(wù)(Pretext Task),使您能夠?qū)W習(xí)分類任務(wù)的有趣特征。
如果你想在不玩實(shí)際比賽的情況下贏得足球比賽,例如,你可以盡可能多地訓(xùn)練雜技球。雜技球?qū)⑻岣吣目厍蚣夹g(shù),這在玩游戲時(shí)會(huì)派上用場(chǎng)。
代理任務(wù)的一個(gè)例子是預(yù)測(cè)圖像的旋轉(zhuǎn)角度?;旧?,對(duì)于每個(gè)圖像,您應(yīng)用旋轉(zhuǎn)?z?來獲取旋轉(zhuǎn)的圖像?x。然后,你訓(xùn)練一個(gè)神經(jīng)網(wǎng)絡(luò)來預(yù)測(cè)?x 中的 z?。?此轉(zhuǎn)換預(yù)測(cè)任務(wù)會(huì)強(qiáng)制您的網(wǎng)絡(luò)深入了解您的數(shù)據(jù)。事實(shí)上,要預(yù)測(cè)狗圖像的旋轉(zhuǎn),您的網(wǎng)絡(luò)首先需要了解圖像中有一只狗,并且狗應(yīng)該以特定的方式定向。

根據(jù)特定目標(biāo),代理任務(wù)可能會(huì)有很大差異。常用的代理任務(wù)包括:
轉(zhuǎn)換預(yù)測(cè):數(shù)據(jù)集中的樣本由轉(zhuǎn)換修改,您的網(wǎng)絡(luò)將學(xué)習(xí)預(yù)測(cè)轉(zhuǎn)換。
屏蔽預(yù)測(cè):輸入圖像的隨機(jī)方塊被屏蔽,網(wǎng)絡(luò)必須預(yù)測(cè)圖像的屏蔽部分。
實(shí)例區(qū)分:了解區(qū)分所有數(shù)據(jù)樣本的表示形式。例如,每個(gè)數(shù)據(jù)點(diǎn)都可以被視為一個(gè)類,并且可以在此任務(wù)上訓(xùn)練分類器。

遷移學(xué)習(xí)
當(dāng)您從頭開始訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)時(shí),您通常會(huì)隨機(jī)初始化權(quán)重。這是初始化神經(jīng)網(wǎng)絡(luò)的最佳方法嗎?答案通常是否定的。
首先,深度學(xué)習(xí)是關(guān)于表征的。在經(jīng)典機(jī)器學(xué)習(xí)中,特征需要手工制作。深度學(xué)習(xí)背后的想法是,你讓你的神經(jīng)網(wǎng)絡(luò)在訓(xùn)練時(shí)自己學(xué)習(xí)特征表示。
在神經(jīng)網(wǎng)絡(luò)的每一層之間,您有一個(gè)輸入數(shù)據(jù)的表示形式。你越深入你的神經(jīng)網(wǎng)絡(luò),你的表示應(yīng)該越全局化。通常,已知分類器神經(jīng)網(wǎng)絡(luò)的第一層能夠檢測(cè)顏色和形狀。中間層將第一層表示作為輸入,以計(jì)算比第一層更復(fù)雜的概念。例如,他們可能會(huì)檢測(cè)到蘋果葉或枝干的存在。最后一層給出了圖像來自每個(gè)類的概率。

遷移學(xué)習(xí)背后的想法是,從另一個(gè)分類任務(wù)中學(xué)習(xí)的一些表示可能對(duì)您的任務(wù)有用。遷移學(xué)習(xí)是關(guān)于在另一項(xiàng)任務(wù)上獲取預(yù)訓(xùn)練網(wǎng)絡(luò)的第一層,在其上添加新層,并在感興趣的數(shù)據(jù)集上微調(diào)整個(gè)網(wǎng)絡(luò)。
作為比較,如果你的目標(biāo)是學(xué)習(xí)贏得足球比賽,那么遷移學(xué)習(xí)將包括先學(xué)習(xí)打籃球,習(xí)慣移動(dòng)你的身體,鍛煉你的耐力等,然后再開始玩足球比賽。
它將如何影響最終網(wǎng)絡(luò)的性能?您應(yīng)該在哪里切斷預(yù)先訓(xùn)練的網(wǎng)絡(luò)?這些問題在中得到了廣泛的解決。
總結(jié)最重要的想法:
神經(jīng)網(wǎng)絡(luò)的第一層是非常通用的,而最深的層是預(yù)訓(xùn)練任務(wù)中最專業(yè)的。因此,您可以預(yù)期,如果您的預(yù)訓(xùn)練任務(wù)接近目標(biāo)任務(wù),那么保留更多層將更有益。
在中間層切割通常會(huì)導(dǎo)致性能不佳。這是由于通過微調(diào)在中間層中達(dá)到的脆弱平衡。
使用預(yù)先訓(xùn)練的權(quán)重總是比使用隨機(jī)初始化的權(quán)重更好。這是因?yàn)橥ㄟ^先訓(xùn)練另一個(gè)任務(wù),你的模型學(xué)會(huì)了它本來不會(huì)學(xué)到的特征。
當(dāng)重新訓(xùn)練這些預(yù)先訓(xùn)練的權(quán)重時(shí),可以獲得更好的表現(xiàn)——最終對(duì)它們使用較低的學(xué)習(xí)率。
R語言深度學(xué)習(xí)卷積神經(jīng)網(wǎng)絡(luò) (CNN)對(duì) CIFAR 圖像進(jìn)行分類:訓(xùn)練與結(jié)果評(píng)估可視化
本文演示了訓(xùn)練一個(gè)簡(jiǎn)單的卷積神經(jīng)網(wǎng)絡(luò) (CNN) 來對(duì) CIFAR 圖像進(jìn)行分類。由于本教程使用 Keras Sequential API,因此創(chuàng)建和訓(xùn)練我們的模型只需幾行代碼。
設(shè)置
library(keras)
?
下載并準(zhǔn)備 CIFAR10 數(shù)據(jù)集
CIFAR10 數(shù)據(jù)集包含 10 個(gè)類別的 60,000 張彩色圖像,每個(gè)類別有 6,000 張圖像。數(shù)據(jù)集分為 50,000 張訓(xùn)練圖像和 10,000 張測(cè)試圖像。這些類是互斥的,它們之間沒有重疊。
驗(yàn)證數(shù)據(jù)
為了驗(yàn)證數(shù)據(jù)集看起來是否正確,讓我們繪制訓(xùn)練集中的前 25 張圖像并在每張圖像下方顯示類別名稱。?
train %>%
?map(as.rater, max = 255) %>%

創(chuàng)建卷積基
下面的6行代碼使用一種常見的模式定義了卷積基礎(chǔ):Conv2D和MaxPooling2D層的堆疊。
作為輸入,CNN接受形狀的張量(image_height, image_width, color_channels),忽略了批次大小。如果你是第一次接觸這些維度,color_channels指的是(R,G,B)。在這個(gè)例子中,你將配置我們的CNN來處理形狀為(32,32,3)的輸入,這是CIFAR圖像的格式。你可以通過將參數(shù)input_shape傳遞給我們的第一層來做到這一點(diǎn)。
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")
到目前為止,讓我們展示一下我們模型的架構(gòu)。
summary(model)

在上面,你可以看到每個(gè)Conv2D和MaxPooling2D層的輸出是一個(gè)三維形狀的張量(高度、寬度、通道)。當(dāng)你深入到網(wǎng)絡(luò)中時(shí),寬度和高度維度往往會(huì)縮小。每個(gè)Conv2D層的輸出通道的數(shù)量由第一個(gè)參數(shù)控制(例如32或64)。通常情況下,隨著寬度和高度的縮小,你可以承受(計(jì)算上)在每個(gè)Conv2D層中增加更多的輸出通道。
在頂部添加密集層
為了完成我們的模型,您需要將卷積基(形狀為 (3, 3, 64))的最后一個(gè)輸出張量輸入一個(gè)或多個(gè) Dense 層以執(zhí)行分類。密集層將向量作為輸入(1D),而當(dāng)前輸出是 3D 張量。首先,您將 3D 輸出展平(或展開)為 1D,然后在頂部添加一個(gè)或多個(gè) Dense 層。CIFAR 有 10 個(gè)輸出類,因此您使用具有 10 個(gè)輸出和 softmax 激活的最終 Dense 層。
model %>%
?leree(unis = 64, aciaion = "relu") %>%
?ayedese(unis = 10, acivin = "sftax")
這是我們模型的完整架構(gòu)。
注意?Keras 模型是可變對(duì)象,您不需要在上面的 chubnk 中重新分配模型。
summary(modl)

如您所見,我們的 (3, 3, 64) 輸出在經(jīng)過兩個(gè) Dense 層之前被展平為形狀為 (576) 的向量。
編譯和訓(xùn)練模型
moel %>% comle( ?optier = "adam", ?lss = "specatialosnopy", ?mecs = "accray")

評(píng)估模型
plot(hsy)
?

?
ealte(oel, x,y, erbe = 0)
?

我們簡(jiǎn)單的 CNN 已經(jīng)實(shí)現(xiàn)了超過 70% 的測(cè)試準(zhǔn)確率。

最受歡迎的見解
1.R語言實(shí)現(xiàn)CNN(卷積神經(jīng)網(wǎng)絡(luò))模型進(jìn)行回歸
2.r語言實(shí)現(xiàn)擬合神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)和結(jié)果可視化
3.python用遺傳算法-神經(jīng)網(wǎng)絡(luò)-模糊邏輯控制算法對(duì)樂透分析
4.R語言結(jié)合新冠疫情COVID-19股票價(jià)格預(yù)測(cè):ARIMA,KNN和神經(jīng)網(wǎng)絡(luò)時(shí)間序列分析
5.Python TensorFlow循環(huán)神經(jīng)網(wǎng)絡(luò)RNN-LSTM神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)股票市場(chǎng)價(jià)格時(shí)間序列和MSE評(píng)估準(zhǔn)確性
6.Matlab用深度學(xué)習(xí)長(zhǎng)短期記憶(LSTM)神經(jīng)網(wǎng)絡(luò)對(duì)文本數(shù)據(jù)進(jìn)行分類
7.用于NLP的seq2seq模型實(shí)例用Keras實(shí)現(xiàn)神經(jīng)機(jī)器翻譯
8.R語言用FNN-LSTM假近鄰長(zhǎng)短期記憶人工神經(jīng)網(wǎng)絡(luò)模型進(jìn)行時(shí)間序列深度學(xué)習(xí)預(yù)測(cè)
9.Python用RNN循環(huán)神經(jīng)網(wǎng)絡(luò):LSTM長(zhǎng)期記憶、GRU門循環(huán)單元、回歸和ARIMA對(duì)COVID-19新冠疫情新增人數(shù)時(shí)間序列預(yù)測(cè)