深度學習之全面了解預訓練模型

在本專欄中,我們將討論預訓練模型。有很多模型可供選擇,因此也有很多考慮事項。

這次的專欄與以往稍有不同。我要回答的問題全部源于 MathWorks 社區論壇(ww2.mathworks.cn/matlabcentral/)的問題。我會首先總結 MATLAB Answers 上的回答,然后基于問題提出問題:大家為什么會問這些問題?

因此,本專欄將介紹如何選擇預訓練模型、如何確定是否作出了正確的選擇,并回答關于預訓練模型的三個問題:

1. 訓練網絡時,應操作數據大小還是模型輸入大小?

2. 為什么要在 MATLAB 中導入經過預訓練的 YOLO 模型?

3. 為什么要凍結預訓練模型的權重?

選擇預訓練模型

可供選擇的模型非常多,而且只會越來越多。這當然帶來很多便利,但也有些令人望而生畏:我們該如何挑選,又如何確定是否作出了正確的選擇?

與其把所有預訓練模型放在一起考慮,我們不妨將它們分成幾類。

基本模型

這些模型架構簡單,可以輕松上手。這些模型通常層數較少,支持預處理和訓練選項的快速迭代。一旦掌握了訓練模型的方法,就可以開始嘗試改善結果。

嘗試這些模型:GoogLeNet、VGG-16、VGG-19 和 AlexNet

圖片

高準確度模型

這些模型適用于基于圖像的工作流,如圖像分類、目標檢測和語義分割。大多數網絡,包括上述基本模型,都屬于此類別。與基本模型的區別在于,高準確度模型可能需要更多訓練時間,網絡結構更復雜。

嘗試這些模型:ResNet-50、Inception-v3、Densenet-201

目標檢測工作流:一般推薦基于 DarkNet-19 和 DarkNet-53 創建檢測和 YOLO 類型工作流。我也見過 ResNet-50 加 Faster R-CNN 的組合,因此多少有一些選擇余地。我們將在之后的問題中進一步討論目標檢測。

語義分割:您可以選擇一個網絡并將其轉換為語義分割網絡。也有一些專門的 Segnet 結構,如 segnetLayers 和 unetLayers。

圖片

適合邊緣部署的模型

當部署到硬件時,模型大小變得尤為重要。此類模型內存占用量較小,適合 Raspberry Pi? 等嵌入式設備。

嘗試這些模型:SqueezeNet、MobileNet-v2、ShuffLeNet、NASNetMobile

圖片

以上只是一些常規原則,為模型選擇提供基本思路。我將從第一類模型入手,之后如果需要,再選擇更復雜的模型。我個人覺得 AlexNet 是一個不錯的起點。它的架構非常容易理解,性能表現通常也不錯,當然也取決于具體問題。

選擇模型時,如何確定是否作出了正確的選擇?

對于您的任務來說,合適的模型可能不止一個。

只要模型的準確度能滿足給定任務的需求,就是一個可接受的模型。至于多高的準確度意味著“可接受”,則可能視應用不同而差異極大。

例如,購物時某寶推薦商品出錯不是什么大事,但暴風雪漏報后果就很嚴重。

針對您的應用嘗試各種預訓練網絡,方能確保獲得最準確和最穩健的模型。

當然,要實現一個成功的應用,網絡架構只是眾多因素之一。

圖片

Q1

問題 1:訓練網絡時,應操作數據大小還是模型輸入大小?

此問題來自論壇提問“如何在預訓練模型中使用灰度圖像”和“如何更改預訓練模型的輸入大小”。

  • 如何在預訓練模型中使用灰度圖:?

https://ww2.mathworks.cn/matlabcentral/answers/448360-how-we-do-transfer-learning-using-pretrained-models-with-grey-scale-images-as-input

  • 如何更改預訓練模型的輸入大小:?

https://ww2.mathworks.cn/matlabcentral/answers/458610-change-input-size-of-a-pre-trained-network

首先快速回顧一下模型數據輸入的相關知識。

所有預訓練模型都有一個預期,即需要什么樣的輸入數據結構,才能重新訓練網絡或基于新數據進行預測。

如果數據與模型預期不符,您就可能提出這些問題。

這就帶來了一個有趣的問題:是要操作數據,還是操作模型?

最簡單的方法是更改數據

這很簡單:只需調整數據的大小,就可以操作數據輸入的大小。在 MATLAB? 中,使用?imresize?命令就能做到。灰度問題也變得很簡單。

彩色圖像通常采用 RGB 形式,包含三個層,分別表示紅、綠、藍三個顏色平面。灰度圖像則只包含一個層而不是三個層。只需重復灰度圖像的單個層,就可以創建網絡所期望的輸入結構,原理如下圖所示。

圖片

山魈照片的原始彩色圖像,經灰度處理的圖像,以及單獨顯示紅、綠、藍平面的圖像。

這是一張色彩非常豐富的圖像,可以看到,三個 RGB 平面看起來就像三張灰度圖像,它們組合在一起形成一張彩色圖像。

稍微復雜一點的方法是更改模型。為什么要大費周章地操作模型而不是數據?

因為現有的輸入數據決定了只能這樣做。

假設您的圖像是 1000×1000 像素,您的模型接受 10×10 像素大小的圖像。如果您將圖像調整到 10×10 像素,就只能得到一張充滿噪聲的輸入圖像。

在這種情況下,您需要更改模型的輸入層,而不是輸入。

圖像大小:1000×1000 像素:

圖片

圖像大小:10×10 像素

圖片

我原以為對模型輸入層進行操作會非常復雜,但在 MATLAB 里試了試,其實還好。相信我,真的不復雜。您只需完成以下操作:

1. 打開深度網絡設計器 Deep Network Designer。

2. 選擇一個預訓練模型。

3. 刪除當前輸入層,并替換為新層。這樣您就可以更改輸入大小。

4. 導出模型,直接就能在遷移學習應用中使用。我推薦按照基本遷移學習示例進行操作:

https://ww2.mathworks.cn/help/deeplearning/ug/train-deep-learning-network-to-classify-new-images.html

整個過程非常輕松,您不必手動編碼即可更改預訓練模型的輸入大小。

Q2

問題 2:為什么要在 MATLAB 中導入經過預訓練的 YOLO 模型?

此問題源于基于 COCO 數據集訓練 YOLO v3,答案很明確。背景并不復雜。

  • 基于 COCO 數據集訓練 YOLO v3

https://ww2.mathworks.cn/matlabcentral/answers/553528-yolo-v3-training-on-coco-data-set

此示例介紹如何使用 ResNet-50 訓練 YOLO v2 網絡以在 MATLAB 中使用:

https://ww2.mathworks.cn/help/deeplearning/ug/object-detection-using-yolo-v2.html

YOLO 是“you only look once”的縮寫。

該算法有多個版本,相對于 v2,v3 改進了定位較小對象的功能。YOLO 從一個特征提取網絡(使用預訓練模型,如 ResNet-50 或 DarkNet-19)開始,然后進行定位。

YOLO v3: https://ww2.mathworks.cn/help/vision/ug/object-detection-using-yolo-v3-deep-learning.html

那么,為什么要在 MATLAB 中導入經過預訓練的 YOLO 模型?

YOLO 是最流行的目標檢測算法之一。與簡單的目標識別問題相比,目標檢測更具挑戰性。

對于目標檢測,面臨的挑戰不僅僅是識別目標,還要確定其位置。

有兩類目標檢測器:

單級檢測器,如 YOLO;兩級檢測器,如 Faster R-CNN。

  • 單級檢測器可以實現快速檢測。這篇文檔詳細介紹了 YOLO v2 算法。

https://ww2.mathworks.cn/help/vision/ug/getting-started-with-yolo-v2.html

  • 兩級檢測器:定位和目標識別準確度高這篇文檔介紹了 R-CNN 算法的基礎知識。

https://ww2.mathworks.cn/help/vision/ug/getting-started-with-r-cnn-fast-r-cnn-and-faster-r-cnn.html

圖片

值得探索的目標檢測應用有很多,不過我強烈建議從簡單的目標檢測示例開始,以此為基礎逐步推進。

Q3

問題 3:為什么要凍結預訓練模型的權重?

此問題源自如何凍結神經網絡模型的特定權重?要回答此問題,我們先看一小段代碼。

導入預訓練網絡后,您可以選擇通過以下方式凍結權重:

凍結所有初始層:

layers(1:10) = freezeWeights(layers(1:10));

凍結單個層:

layer.WeightLearnRateFactor = 0;

凍結所有允許凍結的層:

function layers = freezeWeights(layers)for ii = 1:size(layers,1)props = properties(layers(ii));for p = 1:numel(props)propName = props{p};if ~isempty(regexp(propName, 'LearnRateFactor$',  'once'))layers(ii).(propName) = 0;endend
endend

如果該層有 LearnRateFactor,則將其設置為零。其他層保持不變。

凍結權重有兩個好處,即您可以:

  • 加快訓練速度。由于不需要計算已凍結層的梯度,因此凍結多個初始層的權重可以顯著加快網絡訓練速度。

  • 防止過擬合。如果新數據集很小,凍結較淺的網絡層可以防止這些層對新數據集過擬合。

實際上,您也可以將一個預訓練模型的權重應用于您的模型,這樣不經訓練也能創建一個“經過訓練的”網絡。查看 MATLAB 中?assembleNetwork?的說明,了解如何不經訓練直接基于層創建深度學習網絡。

https://ww2.mathworks.cn/help/deeplearning/ref/assemblenetwork.html

最后,說到權重,對于類分布不平衡的分類問題,可以使用加權分類輸出層。請參考關于使用自定義加權分類層的示例。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211535.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211535.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211535.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于Linux Kernel Panic導致重啟的簡單分析步驟

Linux系統Kernel Panic的檢索 如何判斷是否發生Kernel Panic,以下以 CentOS 7.9系統為例 #查看 /var/crash 路徑下是否有生成文件夾,Kernel Panic后會生成文件夾在此路徑表示產生了Kernel Panic ls /var/crash #/var/crash/127.0.0.1-2023-12-04-08\:5…

HarmonyOS應用開發者基礎認證考試(穩過)

判斷題 ??????? 1. Web組件對于所有的網頁都可以使用zoom(factor: number)方法進行縮放。錯誤(False) 2. 每一個自定義組件都有自己的生命周期正確(True) 3. 每調用一次router.pushUrl()方法,默認情況下,頁面棧數量會加1,頁面棧支持的…

linux redis-cluster ipv6方式

配置文件,具體字段的含義,可以參考其他文檔。 1.單個文件的配置信息 redis_36380.conf requirepass Paas_2024port 36380tcp-backlog 511timeout 0tcp-keepalive 300daemonize yessupervised nopidfile /data/paas/apps/aicache-redis/redis_36380.p…

【STM32】TIM定時器編碼器

1 編碼器接口簡介 Encoder Interface 編碼器接口 編碼器接口可接收增量(正交)編碼器的信號,根據編碼器旋轉產生的正交信號脈沖,自動控制CNT自增或自減,從而指示編碼器的位置、旋轉方向和旋轉速度 接收正交信號&#…

黑豹程序員-EasyExcel實現導出

需求 將業務數據導出到excel中,老牌的可以選擇POI,也有個新的選擇EasyExcel。 有個小坑,客戶要求樣式比較美觀,數字列要求千位符,保留2位小數。 可以用代碼實現但非常繁瑣,用模板就特別方便,模…

C++優秀串口庫

serial::Serial Class Reference #include <serial.h> Data Structures class ScopedReadLockclass ScopedWriteLock Public Member Functions公有成員方法&#xff08;編程用的都在這里了&#xff0c;那些私有的如果不開源一般跟我們沒有關系了&#xff09; Serial …

用chatGPT開發項目:我想的無人的智慧樹網站 流量之神 利用人工智能的算法將人吸引住 GPT4是不是越來越難用了,問一下就要證明一下自己是不是人類

廣度發散&#xff1a;讓AI給出時代或今日或你關注的熱點事件 比如采集新聞頭條&#xff0c;根據內容或標題&#xff0c;以不同的角度&#xff0c;或各種人群的角色&#xff0c;生成50篇簡短的文章。一下就能占傳統的搜索引擎。這是AI最擅長的【千人千面&#xff0c;海量生成】…

【中國海洋大學】操作系統隨堂測試6整理

1. IO系統的層次機構包括&#xff1a;IO硬件、中斷處理程序、&#xff08;&#xff09;程序、設備獨立性軟件、用戶層軟件。 答&#xff1a;設備驅動 2. IO設備和控制器之間的接口包括三種類型的信號&#xff1a;數據信號線、控制信號線和&#xff08;&#xff09;&#xff1…

qt反射基礎

最近研究了一下QT的反射機制&#xff0c; Qt的元對象系統除了提供信號/槽機制的特性之外&#xff0c;它還提供了以下特性: QObject::metaObject() 返回關聯的元對象 QMetaObject::className() 在運行時狀態下返回類名 QObject::inherits() 判斷類的繼承關系 QObject::tr()&…

鴻蒙開發之封裝優化

面向對象開發離不開封裝&#xff0c;將重復的可以復用的代碼封裝起來&#xff0c;提高開發效率。 基于之前的List&#xff0c;對代碼進行封裝。 1、抽取component 將List的頭部抽離出來作為一個新的component。可以創建一個新的ArkTS文件&#xff0c;寫我們的頭部代碼 為了…

代理模式:解析對象間的間接訪問與控制

目錄 引言 理解代理模式 不同類型的代理模式 代理模式的應用場景 代理模式的優缺點 優點 缺點 實際案例&#xff1a;Java中的代理模式應用 結語 引言 代理模式是軟件設計模式中的一種結構型模式&#xff0c;旨在為其他對象提供一種代理以控制對這個對象的訪問。它允許你…

消息隊列使用指南

介紹 消息隊列是一種常用的應用程序間通信方法&#xff0c;可以用來在不同應用程序或組件之間傳遞數據或消息。消息隊列就像一個緩沖區&#xff0c;接收來自發送方的消息&#xff0c;并存儲在隊列中&#xff0c;等待接收方從隊列中取出并處理。 在分布式系統中&#xff0c;消…

死鎖問題,4個必要條件+避免死鎖

目錄 引入 死鎖 概念 示例 多把鎖 單鎖 4個必要條件 用途 引入 我們用加鎖的方式保證了多個線程訪問臨界資源時,不會出現數據紊亂的問題 但是,鎖的引入,會導致出現其他的問題 死鎖 概念 在多線程或多進程的并發環境中&#xff0c;兩個或多個進程或線程被永久阻塞&…

esxi全稱“VMware ESXi

esxi全稱“VMware ESXi”&#xff0c;是可直接安裝在物理服務器上的強大的裸機管理系統&#xff0c;是一款虛擬軟件&#xff1b;ESXi本身可以看做一個操作系統&#xff0c;采用Linux內核&#xff0c;安裝方式為裸金屬方式&#xff0c;可直接安裝在物理服務器上&#xff0c;不需…

數據結構算法-希爾排序算法

引言 在一個普通的下午&#xff0c;小明和小森決定一起玩“誰是老板”的撲克牌游戲。這次他們玩的可不僅僅是娛樂&#xff0c;更是要用撲克牌來決定誰是真正的“大老板”。 然而&#xff0c;小明的牌就像剛從亂麻中取出來的那樣&#xff0c;毫無頭緒。小森的牌也像是被小丑擲…

Agent學習筆記

背景&#xff1a;LLM → \to → Agent ChatGPT為代表的大語言模型就不用過多的介紹了&#xff0c;ChatGPT很強大&#xff0c;但是也有做不到的東西。例如&#xff1a; 實時查詢問題&#xff1a;實時的天氣&#xff0c;地理位置&#xff0c;最新新聞報道&#xff0c;現實世界…

十年婚姻·總結八

十年婚姻總結八 女人一生的合伙人不能只是帥哥哥 女人一生的合伙人不能只是帥哥哥 浪漫的本質還是你的籌碼。 比如你送男人5萬的手表&#xff0c;但你沒什么其他籌碼&#xff08;皮膚粗糙蠟黃、沒人脈金錢資源、長的胖&#xff09;。 那個男人會覺得你胡鬧&#xff0c;你送的…

分類預測 | SSA-HKELM-Adaboost麻雀算法優化混合核極限學習機的數據分類預測

分類預測 | SSA-HKELM-Adaboost麻雀算法優化混合核極限學習機的數據分類預測 目錄 分類預測 | SSA-HKELM-Adaboost麻雀算法優化混合核極限學習機的數據分類預測分類效果基本描述程序設計參考資料 分類效果 基本描述 1.SSA-HKELM-Adaboost麻雀算法優化混合核極限學習機的數據分類…

引用文獻算作重復率么【一文讀懂】

大家好&#xff0c;今天來聊聊引用文獻算作重復率么&#xff0c;希望能給大家提供一點參考。 以下是針對論文重復率高的情況&#xff0c;提供一些修改建議和技巧&#xff1a; 引用文獻算作重復率么 在學術研究和論文撰寫過程中&#xff0c;引用文獻是不可或缺的一部分小發貓偽…

shell學習1——txt文件備份,文件名加個年月日的后綴,如test.txt對于備份文件為test.txt_20231205

跟B站Up主學習shell腳本——阿銘linux 3461576172505894 需求 txt文件備份&#xff0c;文件名加個年月日的后綴&#xff0c;如test.txt對于備份文件為test.txt_20231205 代碼 #!/bin/bash ##定義后綴變量 suffixdate %Y%m%d##找到/test/目錄下的txt文件 for f in find /tes…