PyTorch與深度學(xué)習(xí)實(shí)戰(zhàn) 課件 第2章 PyTorch深度學(xué)習(xí)通用流程_第1頁(yè)
PyTorch與深度學(xué)習(xí)實(shí)戰(zhàn) 課件 第2章 PyTorch深度學(xué)習(xí)通用流程_第2頁(yè)
PyTorch與深度學(xué)習(xí)實(shí)戰(zhàn) 課件 第2章 PyTorch深度學(xué)習(xí)通用流程_第3頁(yè)
PyTorch與深度學(xué)習(xí)實(shí)戰(zhàn) 課件 第2章 PyTorch深度學(xué)習(xí)通用流程_第4頁(yè)
PyTorch與深度學(xué)習(xí)實(shí)戰(zhàn) 課件 第2章 PyTorch深度學(xué)習(xí)通用流程_第5頁(yè)
已閱讀5頁(yè),還剩116頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

數(shù)據(jù)加載與預(yù)處理深度學(xué)習(xí)通常包含數(shù)據(jù)加載與預(yù)處理、構(gòu)建網(wǎng)絡(luò)、訓(xùn)練網(wǎng)絡(luò)和性能評(píng)估幾個(gè)主要的步驟。PyTorch為每個(gè)步驟提供了一些相應(yīng)的函數(shù),使得可以方便快速地進(jìn)行深度學(xué)習(xí)。本章以貓狗分類的例子介紹PyTorch深度學(xué)習(xí)的通用流程。深度學(xué)習(xí)的通用流程如圖所示,分為以下6個(gè)步驟。PyTorch深度學(xué)習(xí)通用流程深度學(xué)習(xí)的通用流程分為以下6個(gè)步驟。數(shù)據(jù)加載,加載用于訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)的數(shù)據(jù),使得深度神經(jīng)網(wǎng)絡(luò)能夠?qū)W習(xí)到數(shù)據(jù)中潛在的特征,可以指定從某些特定路徑加載數(shù)據(jù)。數(shù)據(jù)預(yù)處理,對(duì)加載的數(shù)據(jù)進(jìn)行預(yù)處理,使之符合網(wǎng)絡(luò)的輸入要求,如標(biāo)簽格式轉(zhuǎn)換、樣本變換等。數(shù)據(jù)形式的不統(tǒng)一將對(duì)模型效果造成較大的影響。構(gòu)建網(wǎng)絡(luò),根據(jù)特定的任務(wù)使用不同的網(wǎng)絡(luò)層搭建網(wǎng)絡(luò),若網(wǎng)絡(luò)太簡(jiǎn)單則無(wú)法學(xué)習(xí)到足夠豐富的特征,若網(wǎng)絡(luò)太復(fù)雜則容易過(guò)擬合。PyTorch深度學(xué)習(xí)通用流程編譯網(wǎng)絡(luò),設(shè)置網(wǎng)絡(luò)訓(xùn)練過(guò)程中使用的優(yōu)化器和損失函數(shù),優(yōu)化器和損失函數(shù)的選擇會(huì)影響到網(wǎng)絡(luò)的訓(xùn)練時(shí)長(zhǎng)、性能等。訓(xùn)練網(wǎng)絡(luò),通過(guò)不斷的迭代和批訓(xùn)練的方法,調(diào)整模型中各網(wǎng)絡(luò)層的參數(shù),減小模型的損失,使得模型的預(yù)測(cè)值逼近真實(shí)值。性能評(píng)估,計(jì)算網(wǎng)絡(luò)訓(xùn)練過(guò)程中損失和分類精度等與模型對(duì)應(yīng)的評(píng)價(jià)指標(biāo),根據(jù)評(píng)價(jià)指標(biāo)的變化調(diào)整模型從而取得更好的效果。PyTorch深度學(xué)習(xí)通用流程1數(shù)據(jù)預(yù)處理目錄數(shù)據(jù)加載2加載及預(yù)處理貓狗分類數(shù)據(jù)3數(shù)據(jù)的形式多種多樣,因此讀取數(shù)據(jù)的方法也是多種多樣。在一個(gè)圖像分類的任務(wù)中,圖像所在的文件夾即為圖像的類別標(biāo)簽,則需要把圖片和類別標(biāo)簽都讀入計(jì)算機(jī)中,同時(shí)還需對(duì)圖像數(shù)據(jù)進(jìn)行張量變換和歸一化等預(yù)處理。PyTorch框架中提供了一些常用的數(shù)據(jù)讀取和預(yù)處理的方法。數(shù)據(jù)加載與預(yù)處理在PyTorch框架中,torchtext.utils包中的類可以用于數(shù)據(jù)加載。常見加載的數(shù)據(jù)的方式包括從指定的網(wǎng)址(url)下載數(shù)據(jù)、加載本地的表格數(shù)據(jù)和直接讀取壓縮文件中的數(shù)據(jù)。數(shù)據(jù)加載download_from_url類可以從對(duì)應(yīng)網(wǎng)址下載文件并返回所下載文件的存儲(chǔ)路徑。download_from_url類的語(yǔ)法格式如下。torchtext.utils.download_from_url(url,path=None,root='.data',overwrite=False,hash_value=None,hash_type='sha256')download_from_url類的常用參數(shù)及其說(shuō)明如表所示。數(shù)據(jù)加載1.從指定的網(wǎng)址下載文件參數(shù)名稱說(shuō)明url接收str,表示url文件的網(wǎng)絡(luò)路徑,無(wú)默認(rèn)值root接收str,表示用于存放下載數(shù)據(jù)文件的文件夾路徑,無(wú)默認(rèn)值overwrite接收bool,表示是否覆蓋當(dāng)前文件,默認(rèn)為Falseunicode_csv_reader類用于讀取csv數(shù)據(jù)文件,unicode_csv_reader類的語(yǔ)法格式如下。其中的參數(shù)“unicode_csv_data”指的是csv數(shù)據(jù)文件。torchtext.utils.unicode_csv_reader(unicode_csv_data,**kwargs)數(shù)據(jù)加載2.csv文件讀取器extract_archive類用于讀取壓縮文件中的數(shù)據(jù)。extract_archive類的語(yǔ)法格式如下。torchtext.utils.extract_archive(from_path,to_path=None,overwrite=False)extract_archive類的常用參數(shù)及其說(shuō)明如表所示。數(shù)據(jù)加載3.讀取壓縮文件數(shù)據(jù)參數(shù)名稱說(shuō)明from_path接收str,表示數(shù)據(jù)文件的路徑,無(wú)默認(rèn)值to_path接收str,表示提取文件的根路徑,無(wú)默認(rèn)值overwrite接收bool,表示是否覆蓋當(dāng)前文件,無(wú)默認(rèn)值1數(shù)據(jù)預(yù)處理目錄數(shù)據(jù)加載2加載及預(yù)處理貓狗分類數(shù)據(jù)3在深度學(xué)習(xí)的時(shí)候,可以事先單獨(dú)將圖片進(jìn)行清晰度、畫質(zhì)和切割等處理然后存起來(lái)以擴(kuò)充樣本,但是這樣做效率比較低下,而且不是實(shí)時(shí)的。接下來(lái)介紹如何用PyTorch對(duì)數(shù)據(jù)進(jìn)行處理。數(shù)據(jù)預(yù)處理分為圖像數(shù)據(jù)預(yù)處理和文本數(shù)據(jù)預(yù)處理。數(shù)據(jù)預(yù)處理在PyTorch框架中,處理圖像與視頻的torchvision庫(kù)中常用的包及其說(shuō)明如表所示。圖像數(shù)據(jù)預(yù)處理包說(shuō)明torchvision.datasets提供數(shù)據(jù)集下載和加載功能,包含若干個(gè)常用數(shù)據(jù)集torchvision.io提供執(zhí)行IO操作的功能,主要用于讀取和寫入視頻及圖像torchvision.models包含用于解決不同任務(wù)的網(wǎng)絡(luò)結(jié)構(gòu),并提供已預(yù)訓(xùn)練過(guò)的模型,包括圖像分類、像素語(yǔ)義分割、對(duì)象檢測(cè)、實(shí)例分割、人物關(guān)鍵點(diǎn)檢測(cè)和視頻分類torchvision.ops主要實(shí)現(xiàn)特定用于計(jì)算機(jī)視覺(jué)的運(yùn)算符torchvision.transforms包含多種常見的圖像預(yù)處理操作,如隨機(jī)切割、旋轉(zhuǎn)、數(shù)據(jù)類型轉(zhuǎn)換、圖像到tensor、numpy數(shù)組到tensor、tensor到圖像等torchvision.utils用于將形似(3×H×W)的張量保存到硬盤中,能夠制作圖像網(wǎng)絡(luò)1.組合圖像的多種變換處理Compose類可以將多種圖像的變換處理組合到一起,Compose類語(yǔ)法格式如下。其中參數(shù)“transforms”接收的是由多種變換處理組合成的列表。torchvision.transforms.Compose(transforms)圖像數(shù)據(jù)預(yù)處理其中torchvision.transforms中常用的5種圖像預(yù)處理操作如下。常見的PIL圖像包括以下幾種模式。L(灰色圖像)P(8位彩色圖像)I(32位整型灰色圖像)F(32位浮點(diǎn)灰色圖像)RGB(8位彩色圖像)YCbCr(24位彩色圖像)RGBA(32位彩色模式)CMYK(32位彩色圖像)1(二值圖像)圖像數(shù)據(jù)預(yù)處理2.

對(duì)圖像做變換處理在PyTorch框架下能實(shí)現(xiàn)對(duì)PIL圖像和torch張量做變換處理的類較多,此處僅介紹常用的6個(gè)類。

CenterCrop類CenterCrop類可以裁剪給定的圖像并返回圖像的中心部分。如果圖像是torch張量,形狀將會(huì)是[…,H,W],其中省略號(hào)“…”是一個(gè)任意尺寸。如果輸入圖像的大小小于期望輸出圖像的大小,則在輸入圖像的四周填充0,然后居中裁剪。CenterCrop類的語(yǔ)法格式如下,其中參數(shù)“size”指的是圖像的期望輸出大小。torchvision.transforms.CenterCrop(size)圖像數(shù)據(jù)預(yù)處理ColorJitter類ColorJitter類可以隨機(jī)改變圖像的亮度、對(duì)比度、飽和度和色調(diào)。如果圖像是torch張量,形狀將會(huì)是[…,3,H,W],其中省略號(hào)“…”表示任意數(shù)量的前導(dǎo)維數(shù)。如果圖像是PIL圖像,則不支持模式1、L、I、F和透明模式。ColorJitter的語(yǔ)法格式如下。torchvision.transforms.ColorJitter(brightness=0,contrast=0,saturation=0,hue=0)圖像數(shù)據(jù)預(yù)處理ColorJitter類的常用參數(shù)及其說(shuō)明如表所示。圖像數(shù)據(jù)預(yù)處理參數(shù)名稱說(shuō)明brightness接收int,表示亮度大小。亮度因子統(tǒng)一從【最大值(0,1-自定義值),1+亮度】或給定的【最小值,最大值】中選擇。默認(rèn)為0contrast接收int,表示對(duì)比度大小。對(duì)比度因子統(tǒng)一從【最大值(0,1-自定義值),1+對(duì)比度】或給定【最小值,最大值】中選擇。默認(rèn)為0saturation接收int,表示飽和度大小。飽和度因子統(tǒng)一從【最大值(0,1-自定義值),1+飽和度】或給定【最小值,最大值】中選擇。應(yīng)該是非負(fù)數(shù)。默認(rèn)為0hue接收int,表示色調(diào)大小。色調(diào)因子統(tǒng)一從【-自定義值,自定義值】或給定的【最小值,最大值】中選擇。且有0<=自定義值<0.5或-0.5<=最小值<=最大值<=0.5。默認(rèn)為0FiveCrop類FiveCrop類可以將圖像裁剪成四個(gè)角和中心部分。如果圖像是torch張量,形狀將會(huì)是[…,H,W],其中“…”表示任意數(shù)量的前導(dǎo)維數(shù)。FiveCrop類的語(yǔ)法格式如下,其中參數(shù)“size”指的是裁剪圖像的期望大小。torchvision.transforms.FiveCrop(size)圖像數(shù)據(jù)預(yù)處理Grayscale類Grayscale類可以將圖像轉(zhuǎn)換為灰度圖像。如果圖像是torch張量,形狀將會(huì)是[…,3,H,W],其中省略號(hào)“…”表示任意數(shù)量的前導(dǎo)維數(shù)。Grayscale類的語(yǔ)法格式如下,其中參數(shù)“num_output_channels”表示的是輸出圖像所需的通道數(shù)。torchvision.transforms.Grayscale(num_output_channels=1)圖像數(shù)據(jù)預(yù)處理Pad類Pad類可以使用給定的填充值填充圖像的邊緣區(qū)域。如果圖像是torch張量,形狀將會(huì)是[…,H,W],其中省略號(hào)“…”表示模式反射和對(duì)稱的最多2個(gè)前導(dǎo)維數(shù)。Pad類的語(yǔ)法格式如下。torchvision.transforms.Pad(padding,fill=0,padding_mode='constant')Pad類的常用參數(shù)及其說(shuō)明如表所示。圖像數(shù)據(jù)預(yù)處理參數(shù)名稱說(shuō)明padding接收int或序列,表示在圖像邊緣區(qū)域填充。如果只提供一個(gè)整型int數(shù)據(jù),那么填充所有的邊緣區(qū)域。如果提供了長(zhǎng)度為2的序列,那么填充左右邊緣或上下邊緣區(qū)域。如果提供了長(zhǎng)度為4的序列,那么填充上下左右四個(gè)邊緣區(qū)域。無(wú)默認(rèn)值fill接收int或元組,表示填充值。如果值是長(zhǎng)度為3的元組,那么分別用于填充R、G、B三個(gè)通道。此值僅在填充模式為常數(shù)時(shí)使用。默認(rèn)為0。Resize類Resize類可以將輸入圖像調(diào)整到指定的尺寸。如果圖像是torch張量,形狀將會(huì)是[…,H,W]形狀,其中省略號(hào)“…”表示任意數(shù)量的前導(dǎo)維數(shù)。Resize類的語(yǔ)法格式如下。torchvision.transforms.Resize(size,interpolation=<InterpolationMode.BILINEAR:'bilinear'>)Resize類的常用參數(shù)及其說(shuō)明如表所示。圖像數(shù)據(jù)預(yù)處理參數(shù)名稱說(shuō)明size接收int,表示期望輸出大小,無(wú)默認(rèn)值interpolation接收str,表示插入式模式。默認(rèn)為InterpolationMode.BILINEARPyTorch不僅可設(shè)置對(duì)圖片的變換處理,還可以對(duì)這些變換處理進(jìn)行隨機(jī)選擇、組合,數(shù)據(jù)增強(qiáng)更靈活。RandomChoice類RandomChoice類從接收的變換處理列表中隨機(jī)選取的單個(gè)變換處理對(duì)圖像進(jìn)行變換。RandomChoice類的語(yǔ)法格式如下。RandomChoice類的參數(shù)說(shuō)明與Compose類一致。torchvision.transforms.RandomChoice(transforms)圖像數(shù)據(jù)預(yù)處理3.

對(duì)變換處理列表做處理RandomOrder類RandomOrder類隨機(jī)打亂接收的變換處理列表中的變換處理。RandomOrder類的語(yǔ)法格式如下。RandomOrder類的參數(shù)說(shuō)明與Compose類一致。torchvision.transforms.RandomOrder(transforms)圖像數(shù)據(jù)預(yù)處理對(duì)圖像數(shù)據(jù)做變換處理操作的類較多,此處介紹常用的兩個(gè)類。LinearTransformation類LinearTransformation類用平方變換矩陣和離線計(jì)算的均值向量變換圖像數(shù)據(jù)。LinearTransformation類的語(yǔ)法格式如下。torchvision.transforms.LinearTransformation(transformation_matrix,mean_vector)LinearTransformation類的常用參數(shù)及其說(shuō)明如表所示。圖像數(shù)據(jù)預(yù)處理4.

對(duì)圖像數(shù)據(jù)做變換處理參數(shù)名稱說(shuō)明transformation_matrix接收str,表示變換矩陣,輸入格式為[DxD]。無(wú)默認(rèn)值mean_vector接收str,平均向量,輸入格式為[D]。無(wú)默認(rèn)值Normalize類Normalize類用均值和標(biāo)準(zhǔn)差對(duì)圖像數(shù)據(jù)進(jìn)行歸一化處理。Normalize類的語(yǔ)法格式如下。torchvision.transforms.Normalize(mean,std,inplace=False)Normalize類的常用參數(shù)及其說(shuō)明如表所示。圖像數(shù)據(jù)預(yù)處理參數(shù)名稱說(shuō)明mean接收int或float,表示每個(gè)通道的均值。無(wú)默認(rèn)值std接收int或float,表示每個(gè)通道的標(biāo)準(zhǔn)差。無(wú)默認(rèn)值由于直接讀取圖像得到的數(shù)據(jù)的類型與輸入網(wǎng)絡(luò)的數(shù)據(jù)類型不對(duì)應(yīng),因此需要對(duì)數(shù)據(jù)的格式進(jìn)行轉(zhuǎn)換。ToPILImage類ToPILImage類將tensor類型或ndarray類型的數(shù)據(jù)轉(zhuǎn)換為PILImage類型的數(shù)據(jù)。ToPILImage類的語(yǔ)法格式如下,其中參數(shù)“mode”指的是輸入數(shù)據(jù)的顏色空間和像素深度。torchvision.transforms.ToPILImage(mode=None)圖像數(shù)據(jù)預(yù)處理5.

格式轉(zhuǎn)換變換處理ToTensor類ToTensor類將PILImage類型或ndarray類型的數(shù)據(jù)轉(zhuǎn)換為tensor類型的數(shù)據(jù),并且歸一化至[0,1]。ToTensor類的語(yǔ)法格式如下。torchvision.transforms.ToTensor如果PIL圖像屬于L、P、I、F、RGB、YCbCr、RGBA、CMYK和1這些形式之一,那么將[0,255]范圍內(nèi)的PIL圖像或numpy.ndarray(H×W×C)轉(zhuǎn)換為[0.0,1.0]范圍內(nèi)的浮點(diǎn)張量(C×H×W)。在其他情況下,不按比例返回張量。圖像數(shù)據(jù)預(yù)處理1.劃分訓(xùn)練集和測(cè)試集SogouNews類可以對(duì)PyTorch框架自帶的數(shù)據(jù)集進(jìn)行訓(xùn)練集測(cè)試集的劃分,SogouNews類的語(yǔ)法格式如下。torchtext.datasets.SogouNews(root='.data',split=('train','test'))SogouNews類的常用參數(shù)及其說(shuō)明如表所示。文本數(shù)據(jù)預(yù)處理在PyTorch框架中可以利用trochtext庫(kù)中的相關(guān)類對(duì)文本數(shù)據(jù)進(jìn)行數(shù)據(jù)預(yù)處理。參數(shù)名稱說(shuō)明root接收str,表示保存數(shù)據(jù)集的目錄,無(wú)默認(rèn)值split接收str,表示劃分?jǐn)?shù)據(jù)集和測(cè)試集的標(biāo)準(zhǔn),無(wú)默認(rèn)值WikiText2類也可以對(duì)PyTorch框架自帶的數(shù)據(jù)集進(jìn)行訓(xùn)練集、驗(yàn)證集和測(cè)試集的劃分。WikiText2類的語(yǔ)法格式如下。torchtext.datasets.WikiText2(root='.data',split=('train','valid','test'))WikiText2類僅能對(duì)三個(gè)PyTorch自帶數(shù)據(jù)集進(jìn)行操作,分別是WikiText-2數(shù)據(jù)集、WikiText103數(shù)據(jù)集和PennTreebank數(shù)據(jù)集。文本數(shù)據(jù)預(yù)處理Vocab類可以定義用于計(jì)算字段的詞匯表對(duì)象。Vocab類的語(yǔ)法格式如下。torchtext.vocab.Vocab(counter,max_size=None,min_freq=1,pecials=('<unk>','<pad>'),vectors=None,unk_init=None,vectors_cache=None,specials_first=True)文本數(shù)據(jù)預(yù)處理2.創(chuàng)建詞匯表Vocab類的常用參數(shù)及其說(shuō)明如表所示。文本數(shù)據(jù)預(yù)處理參數(shù)名稱說(shuō)明counter接收f(shuō)loat,表示保存數(shù)據(jù)中每個(gè)值的頻率,無(wú)默認(rèn)值max_size接收int,表示最大詞匯容量,無(wú)默認(rèn)值min_freq接收int,表示能保存進(jìn)詞匯表的最低頻率,默認(rèn)為1specials接收str,表示將加在詞匯表前面的特殊標(biāo)記的列表,默認(rèn)值為('<unk>','<pad>')vectors接收int,表示可用的預(yù)訓(xùn)練向量,無(wú)默認(rèn)值vectors_cache接收str,表示緩存向量的目錄,無(wú)默認(rèn)值generate_sp_model類用于構(gòu)建句子生成器,generate_sp_model類的語(yǔ)法格式如下。torchtext.data.functional.generate_sp_model(filename,vocab_size=20000,model_type='unigram',model_prefix='m_user')generate_sp_model類的常用參數(shù)及其說(shuō)明如表所示。文本數(shù)據(jù)預(yù)處理3.構(gòu)建句子生成器參數(shù)名稱說(shuō)明filename接收str,表示用于構(gòu)建句子生成器的數(shù)據(jù)文件,無(wú)默認(rèn)值vocab_size接收int,表示詞匯量,默認(rèn)為20000model_type接收str,表示生成句子網(wǎng)絡(luò)的類型,包括unigram、bpe、char、word,默認(rèn)為unigrammodel_prefix接收str,表示數(shù)據(jù)文件和詞匯表的前綴保存形式,默認(rèn)為m_userload_sp_model類用于加載數(shù)據(jù)文件的句子生成器。load_sp_model類的語(yǔ)法格式如下,其中參數(shù)“SPM”指的是保存句子生成器的文件路徑。torchtext.data.functional.load_sp_model(SPM)文本數(shù)據(jù)預(yù)處理4.

加載句子生成器sentencepiece_numericalizer類用于建立基于文本句子的數(shù)字映射。sentencepiece_numericalizer類的語(yǔ)法格式如下,其中參數(shù)“sp_model”指的是句子生成器。torchtext.data.functional.sentencepiece_numericalizer(sp_model)文本數(shù)據(jù)預(yù)處理5.

構(gòu)建句子計(jì)數(shù)器sentencepiece_tokenizer類用于標(biāo)記文本句子中各個(gè)詞匯,sentencepiece_tokenizer類的語(yǔ)法格式如下。輸入文本句子,將輸出句子中所有成分。torchtext.data.functional.sentencepiece_tokenizer(sp_model)文本數(shù)據(jù)預(yù)處理6.構(gòu)建句子標(biāo)記器simple_space_split類用于對(duì)句子進(jìn)行分詞處理,并輸出句子中的各個(gè)詞匯。simple_space_split類的語(yǔ)法格式如下。torchtext.data.functional.simple_space_split(iterator)文本數(shù)據(jù)預(yù)處理7.構(gòu)建句子分詞器1數(shù)據(jù)預(yù)處理目錄數(shù)據(jù)加載2加載及預(yù)處理貓狗分類數(shù)據(jù)3本小節(jié)將以貓狗數(shù)據(jù)集為例進(jìn)行演示數(shù)據(jù)加載和預(yù)處理。貓狗數(shù)據(jù)集的訓(xùn)練集包含25000張圖片,其中貓圖有12500張,狗圖有12500張。測(cè)試集包含400張圖片,其中貓圖有200張,狗圖有200張。定義路徑讀取函數(shù),用于得到一個(gè)包含所有圖片文件名(包含路徑)和標(biāo)簽(狗1貓0)的列表?,F(xiàn)有數(shù)據(jù)的命名都是有序號(hào)的,訓(xùn)練集中數(shù)據(jù)編號(hào)為0~499,測(cè)試集中數(shù)據(jù)編號(hào)為1000~1200,因此可以根據(jù)這個(gè)規(guī)律獲取訓(xùn)練集圖像路徑的列表。data1對(duì)象是一個(gè)包含五百個(gè)文件名以及標(biāo)簽的列表。find_label函數(shù)用于判斷標(biāo)簽是dog(狗)還是cat(貓),dog返回1,cat返回0。在定義了路徑讀取和標(biāo)簽判讀函數(shù)后,調(diào)用四次路徑讀取和標(biāo)簽判讀函數(shù)并輸入不同的參數(shù),即可獲取到四個(gè)列表(訓(xùn)練集中的貓、訓(xùn)練集中的狗、測(cè)試集中的貓、測(cè)試集中的狗)。加載及預(yù)處理貓狗分類數(shù)據(jù)使用PIL包的Image類讀取圖片。重寫PyTorch的Dataset類,其中__getitem__()方法用于讀取數(shù)據(jù)集中數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行變換操作。使用Compose函數(shù)組合多種變換操作得到transform對(duì)象。transform對(duì)象中包含的變換處理操作如下。transforms.CenterCrop(224),從圖像中心開始裁剪圖像,224為裁剪大小。transforms.Resize((224,224)),重新定義圖像大小。transforms.ToTensor(),很重要的一步,將圖像數(shù)據(jù)轉(zhuǎn)為Tensor類型。transforms.Normalize(mean=(0.5,0.5,0.5),std=(0.5,0.5,0.5)),歸一化。train_data以及test_data即為最終需要得到的數(shù)據(jù)。接下來(lái)將介紹常用的網(wǎng)絡(luò)層以及構(gòu)建網(wǎng)絡(luò)的方法。加載及預(yù)處理貓狗分類數(shù)據(jù)構(gòu)建網(wǎng)絡(luò)構(gòu)建網(wǎng)絡(luò)是深度學(xué)習(xí)最重要的一個(gè)步驟。若網(wǎng)絡(luò)太簡(jiǎn)單則無(wú)法學(xué)習(xí)到足夠豐富的特征,若網(wǎng)絡(luò)太復(fù)雜則容易過(guò)擬合。而且,對(duì)不同的數(shù)據(jù),要選擇合適的網(wǎng)絡(luò)結(jié)構(gòu)才能取得較好的結(jié)果。構(gòu)建網(wǎng)絡(luò)1激活函數(shù)目錄常用的網(wǎng)絡(luò)構(gòu)建方法2構(gòu)建基于CNN的貓狗分類網(wǎng)絡(luò)3在深度學(xué)習(xí)中,構(gòu)建網(wǎng)絡(luò)通常是搭建一個(gè)完整的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。神經(jīng)網(wǎng)絡(luò)(NeuralNetworks)是一種應(yīng)用類似于大腦神經(jīng)突觸連接的結(jié)構(gòu)進(jìn)行信息處理的算法。神經(jīng)網(wǎng)絡(luò)已經(jīng)被用于解決分類、回歸等問(wèn)題,同時(shí)被運(yùn)用在機(jī)器視覺(jué)、語(yǔ)音識(shí)別等應(yīng)用領(lǐng)域上。神經(jīng)網(wǎng)絡(luò)是由具有適應(yīng)性的簡(jiǎn)單單元組成的廣泛并行互連網(wǎng)絡(luò),它的結(jié)構(gòu)能夠模擬生物神經(jīng)系統(tǒng)對(duì)真實(shí)世界的交互反應(yīng)。常用的網(wǎng)絡(luò)構(gòu)建方法一個(gè)簡(jiǎn)單的神經(jīng)元結(jié)構(gòu)如圖所示。在圖中,、和表示權(quán)重,表示偏置項(xiàng),表示激活函數(shù),、和是神經(jīng)元的輸入值,輸出值。常用的網(wǎng)絡(luò)構(gòu)建方法將多個(gè)神經(jīng)元按一定的層次結(jié)構(gòu)連接起來(lái),即可得到一個(gè)神經(jīng)網(wǎng)絡(luò)。使用神經(jīng)網(wǎng)絡(luò)需要確定網(wǎng)絡(luò)連接的拓?fù)浣Y(jié)構(gòu)、神經(jīng)元的特征和學(xué)習(xí)規(guī)則等。常見的神經(jīng)網(wǎng)絡(luò)的層級(jí)結(jié)構(gòu)如圖所示,每層神經(jīng)元與下一層的神經(jīng)元全部互連,同層之間神經(jīng)元不存在連接關(guān)系。圖為簡(jiǎn)單的全連接神經(jīng)網(wǎng)絡(luò),其中輸入層神經(jīng)元接收信號(hào),最終輸出結(jié)果由輸出層神經(jīng)元輸出。常用的網(wǎng)絡(luò)構(gòu)建方法隱含層是指除了輸入、輸出層以外的其他層,是模型的黑箱部分,通??山忉屝暂^差。值得注意的是,如果單個(gè)隱含層網(wǎng)絡(luò)不能滿足實(shí)際生產(chǎn)需求,那么可在網(wǎng)絡(luò)中設(shè)置多個(gè)隱含層。深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)中的常見的網(wǎng)絡(luò)層有卷積層、池化層、正則化層、歸一化層和全連接層。網(wǎng)絡(luò)層的先后順序通常是,卷積層優(yōu)先構(gòu)造,池化層放置在卷積層之后,正則化層和歸一化層放置在整個(gè)網(wǎng)絡(luò)中間偏后的位置,全連接層放置在網(wǎng)絡(luò)的后端或多個(gè)卷積層后。在PyTorch框架中,常用的構(gòu)建網(wǎng)絡(luò)的方法有繼承Module類和使用Sequential容器。常用的網(wǎng)絡(luò)構(gòu)建方法Module類是PyTorch框架提供的一個(gè)基類,在搭建神經(jīng)網(wǎng)絡(luò)時(shí)候可以通過(guò)繼承Module類,使得搭建網(wǎng)絡(luò)的過(guò)程變得簡(jiǎn)單。繼承Module類構(gòu)建網(wǎng)絡(luò),其中__init__()方法初始化了網(wǎng)絡(luò)中需要使用的網(wǎng)絡(luò)層,完全相同的網(wǎng)絡(luò)層可以僅初始化一次,但多次進(jìn)行調(diào)用,forward()方法用于設(shè)置網(wǎng)絡(luò)中數(shù)據(jù)的傳播,并返回網(wǎng)絡(luò)的輸出。從Layer列中可以查看所構(gòu)建網(wǎng)絡(luò)的結(jié)構(gòu),從OutputShape列中可以查看每層網(wǎng)絡(luò)輸出數(shù)據(jù)的維度。從Param列中可以查看每層網(wǎng)絡(luò)的參數(shù)個(gè)數(shù)。繼承Module類構(gòu)建網(wǎng)絡(luò)Sequential是一個(gè)有序的容器,網(wǎng)絡(luò)層將按照在傳入構(gòu)造器的順序依次被添加到計(jì)算圖中執(zhí)行,使用Sequential容器構(gòu)建網(wǎng)絡(luò)。同時(shí)以神經(jīng)網(wǎng)絡(luò)模塊為元素的有序字典也可以作為Sequential容器的傳入?yún)?shù)。使用Sequential容器構(gòu)建網(wǎng)絡(luò)1激活函數(shù)目錄常用的網(wǎng)絡(luò)構(gòu)建方法2構(gòu)建基于CNN的貓狗分類網(wǎng)絡(luò)3在神經(jīng)網(wǎng)絡(luò)中,全連接層只是對(duì)上層輸入進(jìn)行線性變換,而多個(gè)線性變換的疊加仍然是一個(gè)線性變換,即含有多個(gè)全連接層的神經(jīng)網(wǎng)絡(luò)與僅含輸出層的單層神經(jīng)網(wǎng)絡(luò)等價(jià)。解決問(wèn)題的一個(gè)方法是,在全連接層后增加一個(gè)非線性的變換,將非線性變換后的結(jié)果作為下一個(gè)全連接層的輸入。這個(gè)非線性函數(shù)被稱為激活函數(shù)(ActivationFunction),神經(jīng)網(wǎng)絡(luò)可以逼近任意函數(shù)的能力與激活函數(shù)的使用不可分割。常見的激活函數(shù)有ReLU、Sigmoid、Tanh和Softmax等。激活函數(shù)線性整流函數(shù)(RectifiedLinearUnit,ReLU),又稱修正線性單元,是一種人工神經(jīng)網(wǎng)絡(luò)中常用的激活函數(shù),通常指代以斜坡函數(shù)及其變種為代表的非線性函數(shù)。ReLU函數(shù)的表達(dá)式如式所示,其中x為神經(jīng)元的輸入值。激活函數(shù)1.ReLU函數(shù)ReLU函數(shù)的幾何表達(dá)如圖所示。由圖可知,當(dāng)輸入為正時(shí),ReLU函數(shù)的輸入與輸出均始終保持線性關(guān)系,當(dāng)輸入趨于正無(wú)窮時(shí),輸出也趨于正無(wú)窮;當(dāng)輸入為負(fù)值時(shí),輸出為0。激活函數(shù)ReLU函數(shù)的優(yōu)點(diǎn)如下。反向傳播時(shí),可以避免梯度消失。使一部分神經(jīng)元的輸出為0,形成稀疏網(wǎng)絡(luò),減少了參數(shù)的相互依存關(guān)系,緩解了過(guò)擬合問(wèn)題的發(fā)生。求導(dǎo)簡(jiǎn)單,整個(gè)過(guò)程的計(jì)算量節(jié)省很多。ReLU的缺點(diǎn)如下。左側(cè)神經(jīng)元為0,導(dǎo)致部分神經(jīng)元死亡,不再更新。輸出非負(fù),所有參數(shù)的更新方向都相同,可能導(dǎo)致梯度下降時(shí)出現(xiàn)震蕩。激活函數(shù)relu類的語(yǔ)法格式如下。torch.nn.functional.relu(input,inplace=False)relu類的常用參數(shù)說(shuō)明如表所示。激活函數(shù)參數(shù)名稱說(shuō)明input接收tensor數(shù)據(jù),表示輸入值,無(wú)默認(rèn)值inplace接收bool,表示計(jì)算softmax的維度數(shù),默認(rèn)值為FalseLeakyReLU激活函數(shù)是ReLU激活函數(shù)的變式,主要是為了修復(fù)ReLU激活函數(shù)中負(fù)軸為0導(dǎo)致的問(wèn)題。LeakyReLU激活函數(shù)的負(fù)軸保留了非常小的常數(shù),使得輸入信息小于0時(shí),信息得到保留。LeakyReLU函數(shù)的表達(dá)式如式所示,其中x為神經(jīng)元的輸入值,α為非負(fù)的小數(shù)。激活函數(shù)2.LeakyReLU函數(shù)LeakyReLU函數(shù)的幾何表達(dá)如圖所示。leaky_relu類的語(yǔ)法格式如下,leaky_relu類的常用參數(shù)說(shuō)明與torch.nn.functional.relu類一致。torch.nn.functional.leaky_relu(input,negative_slope=0.01,inplace=False)激活函數(shù)Sigmoid函數(shù)是一個(gè)在生物學(xué)中常見的S型函數(shù),也稱為S型生長(zhǎng)曲線。在信息科學(xué)中,由于其單增以及反函數(shù)單增等性質(zhì),Sigmoid函數(shù)常被用作神經(jīng)網(wǎng)絡(luò)的閾值函數(shù),將變量映射到0到1之間。Sigmoid函數(shù)的表達(dá)式如式所示,其中x為神經(jīng)元的輸入值。激活函數(shù)3.Sigmoid函數(shù)Sigmoid函數(shù)的幾何表達(dá)如圖所示。由圖可知,縱坐標(biāo)的范圍在0~1的區(qū)間內(nèi),隨著橫坐標(biāo)值從左往右增大,曲線的縱坐標(biāo)值從0無(wú)限趨近于1,表示Sigmoid函數(shù)的輸出范圍是0到1,即對(duì)每個(gè)神經(jīng)元的輸出進(jìn)行了歸一化。由于概率的取值范圍是0到1,因此Sigmoid函數(shù)非常適合用在以預(yù)測(cè)概率作為輸出的模型中。激活函數(shù)Sigmoid優(yōu)點(diǎn)如下。Sigmoid的取值范圍為(0,1),而且是單調(diào)遞增,比較容易優(yōu)化。Sigmoid求導(dǎo)比較容易,可以直接推導(dǎo)得出。Sigmoid缺點(diǎn)如下。Sigmoid函數(shù)收斂比較緩慢。由于Sigmoid是軟飽和,容易產(chǎn)生梯度消失,對(duì)于深度網(wǎng)絡(luò)訓(xùn)練不太適合,由上頁(yè)圖可知,當(dāng)x趨于無(wú)窮大時(shí),會(huì)使導(dǎo)數(shù)趨于0。sigmoid類的語(yǔ)法格式如下,其中參數(shù)“input”表示輸入值。torch.nn.functional.sigmoid(input)激活函數(shù)Tanh函數(shù)是雙曲正切激活函數(shù)。Tanh函數(shù)的表達(dá)式如式所示,其中x為神經(jīng)元的輸入值。激活函數(shù)4.Tanh函數(shù)Tanh函數(shù)的幾何表達(dá)如圖所示。由圖可知,當(dāng)橫坐標(biāo)值趨于負(fù)無(wú)窮時(shí),縱坐標(biāo)值無(wú)限趨近于-1。當(dāng)橫坐標(biāo)值趨于正無(wú)窮時(shí),縱坐標(biāo)值無(wú)限趨近于1。當(dāng)輸入的絕對(duì)值大于5時(shí),輸出幾乎是平滑的并且梯度較小,不利于權(quán)重更新。激活函數(shù)Tanh函數(shù)跟Sigmoid函數(shù)的區(qū)別在于輸出間隔,Tanh的輸出間隔為2,并且整個(gè)函數(shù)以0為中心。在一般的二元分類問(wèn)題中,Tanh函數(shù)常用于隱藏層,而Sigmoid函數(shù)常用于輸出層。但這并不是固定的,需要根據(jù)特定問(wèn)題進(jìn)行調(diào)整。激活函數(shù)Tanh優(yōu)點(diǎn)如下。函數(shù)輸出以(0,0)為中心。收斂速度相對(duì)于Sigmoid更快。Tanh缺點(diǎn)如下。Tanh并沒(méi)有解決Sigmoid梯度消失的問(wèn)題。含有較多的冪運(yùn)算,增加計(jì)算所需的時(shí)間。tanh類的語(yǔ)法格式如下,其中參數(shù)“input”表示輸入值。torch.nn.functional.tanh(input)激活函數(shù)Softmax函數(shù)常在神經(jīng)網(wǎng)絡(luò)輸出層充當(dāng)激活函數(shù),將輸出層的值映射到(0,1)區(qū)間,將神經(jīng)元輸出構(gòu)造成概率分布,用于多分類問(wèn)題中,Softmax激活函數(shù)映射值越大,則真實(shí)類別可能性越大。Softmax函數(shù)的表達(dá)式如式所示,其中i為輸入神經(jīng)元的第i個(gè)元素。

由式可知,Softmax函數(shù)為指數(shù)形式的函數(shù),且映射后的數(shù)值受映射前所有數(shù)值的影響。激活函數(shù)5.Softmax函數(shù)Softmax優(yōu)點(diǎn)如下。指數(shù)函數(shù)求導(dǎo)的時(shí)候比較方便,加快模型的訓(xùn)練。能夠?qū)⑤敵鲋道_距離,使不同類間的區(qū)別更明顯。Softmax缺點(diǎn)如下。通過(guò)Softmax函數(shù)計(jì)算得到的數(shù)值有可能會(huì)變得過(guò)大從而導(dǎo)致溢出。輸入均為負(fù)時(shí),可能會(huì)出現(xiàn)梯度為0。激活函數(shù)oftmax類的語(yǔ)法格式如下。torch.nn.functional.softmax(input,dim=None,_stacklevel=3,dtype=None)softmax類的常用參數(shù)及其說(shuō)明如表所示。激活函數(shù)參數(shù)名稱說(shuō)明input接收tensor數(shù)據(jù),表示輸入值,無(wú)默認(rèn)值dim接收int,表示計(jì)算softmax的維度數(shù),無(wú)默認(rèn)值dtype接收str,表示所需的數(shù)據(jù)類型的返回張量,無(wú)默認(rèn)值1激活函數(shù)目錄常用的網(wǎng)絡(luò)構(gòu)建方法2構(gòu)建基于CNN的貓狗分類網(wǎng)絡(luò)3搭建3種不同的CNN網(wǎng)絡(luò)進(jìn)行測(cè)試,首先搭建一個(gè)經(jīng)典CNN網(wǎng)絡(luò),包含兩個(gè)卷積層、兩個(gè)池化層、一個(gè)全連接層和一個(gè)丟棄層。丟棄層的存在是為了防止過(guò)擬合,可以視情況保留或刪除。其次是搭建一個(gè)簡(jiǎn)單的VGG網(wǎng)絡(luò),包含8個(gè)卷積層、8個(gè)池化層、1個(gè)全連接層和1個(gè)丟棄層。一般而言,VGG網(wǎng)絡(luò)需要至少3個(gè)全連接層。但是考慮到全連接層有大量的參數(shù),為了減小電腦GPU的負(fù)荷,所以僅保留了一個(gè)全連接層。并在每一個(gè)卷積層后都配置一個(gè)最大池化層,用于降低后續(xù)計(jì)算的參數(shù)量。經(jīng)過(guò)調(diào)整后的神經(jīng)網(wǎng)絡(luò)雖然在結(jié)構(gòu)上發(fā)生了較大的變化,但是降低了運(yùn)行代碼所需的計(jì)算機(jī)資源。最后搭建一個(gè)簡(jiǎn)單的AlexNet網(wǎng)絡(luò),包含5個(gè)卷積層、5個(gè)池化層、1個(gè)全連接層和1個(gè)丟棄層。構(gòu)建基于CNN的貓狗分類網(wǎng)絡(luò)編譯網(wǎng)絡(luò)1優(yōu)化器目錄損失函數(shù)2編譯基于CNN的貓狗分類網(wǎng)絡(luò)3網(wǎng)絡(luò)的訓(xùn)練可以理解為擬合輸入數(shù)據(jù)到真實(shí)標(biāo)簽的一個(gè)映射,通過(guò)某個(gè)函數(shù)計(jì)算真實(shí)標(biāo)簽和預(yù)測(cè)標(biāo)簽之間差異,該差異即為網(wǎng)絡(luò)的損失Loss,計(jì)算差異的函數(shù)即為損失函數(shù)。網(wǎng)絡(luò)的損失是衡量網(wǎng)絡(luò)好壞的一個(gè)主要指標(biāo)。同時(shí),損失Loss必須是標(biāo)量,因?yàn)橄蛄繜o(wú)法直接比較大?。ㄏ蛄勘旧硇枰ㄟ^(guò)范數(shù)等標(biāo)量來(lái)比較)。損失函數(shù)L1范數(shù)損失(L1Loss)計(jì)算預(yù)測(cè)值和真實(shí)值之差的絕對(duì)值的平均數(shù),常用于回歸問(wèn)題,L1Loss類的語(yǔ)法格式如下。torch.nn.L1Loss(size_average=None,reduce=None,reduction='mean’)L1Loss類的常用參數(shù)及其說(shuō)明如表所示。損失函數(shù)1.L1Loss參數(shù)名稱說(shuō)明size_average接收bool或optional,表示尺寸平均化,默認(rèn)為Truereduce接收bool或optional,表示縮減值,默認(rèn)為Truereduction接收str或optional,表示指定應(yīng)用于輸出值的縮減方式,默認(rèn)值為mean平滑L1范數(shù)損失(SmoothL1Loss)在預(yù)測(cè)值和真實(shí)值之差的絕對(duì)值小于1時(shí),取絕對(duì)值的平方的平均數(shù);當(dāng)絕對(duì)值大于1時(shí),取L1范數(shù)損失,常用于回歸問(wèn)題。SmoothL1Loss類的語(yǔ)法格式如下。torch.nn.SmoothL1Loss(size_average=None,reduce=None,reduction='mean',beta=1.0)SmoothL1Loss類常用的參數(shù)及其說(shuō)明與L1Loss類的參數(shù)及其說(shuō)明一致。損失函數(shù)2.SmoothL1Loss平方損失函數(shù)(MSELoss)計(jì)算預(yù)測(cè)值和真實(shí)值之間的平方和的平均數(shù),常用于回歸問(wèn)題。torch.nn.MSELoss類的語(yǔ)法格式如下。torch.nn.MSELoss(size_average=None,reduce=None,reduction='mean')MSELoss類的常用參數(shù)及其說(shuō)明與L1Loss類的參數(shù)及其說(shuō)明一致。損失函數(shù)3.MSELoss交叉熵?fù)p失函數(shù)(CrossEntropyLoss)刻畫的是實(shí)際輸出(概率)與期望輸出(概率)分布的距離,交叉熵的值越小,兩個(gè)概率分布就越接近,常用于分類問(wèn)題中。CrossEntropyLoss類的語(yǔ)法格式如下。torch.nn.CrossEntropyLoss(weight=None,size_average=None,ignore_index=-100,reduce=None,reduction='mean’)損失函數(shù)4.CrossEntropyLossCrossEntropyLoss類的常用的參數(shù)及其說(shuō)明如表所示。損失函數(shù)參數(shù)名稱說(shuō)明weight接收tensor數(shù)據(jù),表示權(quán)重,無(wú)默認(rèn)值size_average接收bool或optional,表示尺寸平均化,默認(rèn)為Trueignore_index接收int,表示一個(gè)被忽略的目標(biāo)值,該目標(biāo)值對(duì)輸入梯度沒(méi)有貢獻(xiàn),默認(rèn)值為100二分類交叉熵?fù)p失函數(shù)(BCELoss)是交叉熵?fù)p失的二進(jìn)制版,常用于二分類問(wèn)題。BCELoss類的語(yǔ)法格式如下。torch.nn.BCELoss(weight=None,size_average=None,reduce=None,reduction='mean')BCELoss類常用的參數(shù)及其說(shuō)明與CrossEntropyLoss常用的參數(shù)及其說(shuō)明一致。損失函數(shù)5.BCELoss帶邏輯回歸的二分類交叉熵?fù)p失函數(shù)(BCEWithLogitsLoss)將Sigmoid激活函數(shù)集成到BCELoss類中,可以讓計(jì)算數(shù)值更穩(wěn)定,常用于分類問(wèn)題。BCEWithLogitsLoss類的語(yǔ)法格式如下。torch.nn.BCEWithLogitsLoss(weight=None,size_average=None,reduce=None,reduction='mean',pos_weight=None)BCEWithLogitsLoss類的常用參數(shù)及其說(shuō)明與torch.nn.L1Loss類的常用參數(shù)及其說(shuō)明一致。損失函數(shù)6.BCEWithLogitsLoss負(fù)對(duì)數(shù)似然損失函數(shù)(NLLLoss)的輸入值是經(jīng)過(guò)LogSoftmax函數(shù)處理后的邏輯回歸值,常用于分類問(wèn)題。NLLLoss類的語(yǔ)法格式如下。torch.nn.NLLLoss(weight=None,size_average=None,ignore_index=-100,reduce=None,reduction='mean')NLLLoss類的常用參數(shù)及其說(shuō)明與CrossEntropyLoss類的常用參數(shù)及其說(shuō)明一致。損失函數(shù)7.NLLLoss泊松分布的負(fù)對(duì)數(shù)似然損失(PoissonNLLLoss)是輸出的分類服從泊松分布時(shí)采用的損失函數(shù),常用于分類問(wèn)題。PoissonNLLLoss類的語(yǔ)法格式如下。torch.nn.PoissonNLLLoss(log_input=True,full=False,size_average=None,eps=1e-08,reduce=None,reduction='mean')PoissonNLLLoss類的常用參數(shù)及其說(shuō)明如表所示。損失函數(shù)8.PoissonNLLLoss參數(shù)名稱說(shuō)明log_input接收bool或optional,表示按照何種公式計(jì)算損失,如果設(shè)置為True,損失將會(huì)按照公式exp(input)–target×input來(lái)計(jì)算,如果設(shè)置為False,損失將會(huì)按照input–target×log(input+eps)計(jì)算。默認(rèn)值為Truefull接收bool或optional,表示是否計(jì)算全部的損失,默認(rèn)值為FalseKL散度損失(KLDivLoss)計(jì)算輸入值和標(biāo)簽之間的KL散度。KL散度可用于衡量不同的連續(xù)分布之間的距離,在連續(xù)的輸出分布的空間上(離散采樣)上進(jìn)行回歸時(shí)有不錯(cuò)的效果,常用于回歸問(wèn)題。KLDivLoss類的語(yǔ)法格式如下。torch.nn.KLDivLoss(size_average=None,reduce=None,reduction='mean',log_target=False)KLDivLoss類的常用參數(shù)及其說(shuō)明與L1Loss類的常用參數(shù)及其說(shuō)明一致。損失函數(shù)9.KLDivLoss連接時(shí)序分類損失(CTCLoss)可以對(duì)沒(méi)有對(duì)齊的數(shù)據(jù)進(jìn)行自動(dòng)對(duì)齊,主要用在沒(méi)有事先對(duì)齊的序列化數(shù)據(jù)訓(xùn)練上,如語(yǔ)音識(shí)別。CTCLoss類的語(yǔ)法格式如下。torch.nn.CTCLoss(blank=0,reduction='mean',zero_infinity=False)CTCLoss類的常用參數(shù)及其說(shuō)明如表所示。損失函數(shù)10.CTCLoss參數(shù)名稱說(shuō)明blank接收int,表示空白標(biāo)簽數(shù)量,默認(rèn)為0reduction接收str,表示指定應(yīng)用于輸出值的縮減方式,默認(rèn)為meanzero_infinity接收bool,表示是否將無(wú)限損失和相關(guān)梯度定為零,默認(rèn)為False1優(yōu)化器目錄損失函數(shù)2編譯基于CNN的貓狗分類網(wǎng)絡(luò)3在神經(jīng)網(wǎng)絡(luò)網(wǎng)絡(luò)中,神經(jīng)元的參數(shù)(權(quán)重和偏差)在訓(xùn)練神經(jīng)網(wǎng)絡(luò)時(shí)起到非常重要的作用,主要用于計(jì)算預(yù)測(cè)值。如果網(wǎng)絡(luò)的損失較大,那么可以認(rèn)為網(wǎng)絡(luò)的表現(xiàn)較差。網(wǎng)絡(luò)的訓(xùn)練即是通過(guò)改變網(wǎng)絡(luò)中的參數(shù)實(shí)現(xiàn)改變輸出預(yù)測(cè)值的過(guò)程。毫無(wú)方向地改變參數(shù)并不能使得網(wǎng)絡(luò)變好,因此需要某種優(yōu)化策略和算法,更新和計(jì)算影響網(wǎng)絡(luò)訓(xùn)練和網(wǎng)絡(luò)輸出的參數(shù),使輸出的預(yù)測(cè)值逼近真實(shí)值,這便是優(yōu)化器的由來(lái)。優(yōu)化器Optimizer優(yōu)化器是所有優(yōu)化器的基類,是最原始的優(yōu)化器,適用范圍廣,沒(méi)有很強(qiáng)的網(wǎng)絡(luò)針對(duì)性。Optimizer類的語(yǔ)法格式如下,其中參數(shù)“params”是用于優(yōu)化或定義參數(shù)組的參數(shù)表,參數(shù)“defaults”取默認(rèn)值即可。torch.optim.Optimizer(params,defaults)優(yōu)化器1.Optimizer隨機(jī)梯度下降(StochasticGradientDescent,SGD)隨機(jī)計(jì)算訓(xùn)練集中的小批量(minibatches)的損失用于更新參數(shù),從而解決訓(xùn)練數(shù)據(jù)的樣本量很大時(shí),計(jì)算總的損失求解梯度的計(jì)算量很大的問(wèn)題。SGD類的語(yǔ)法格式如下。torch.optim.SGD(params,lr=<requiredparameter>,momentum=0,dampening=0,weight_decay=0,nesterov=False)優(yōu)化器2.SGDSGD類的常用的參數(shù)及其說(shuō)明如表所示。優(yōu)化器參數(shù)名稱說(shuō)明params接收iterable,表示用于優(yōu)化或定義參數(shù)組的參數(shù)表,無(wú)默認(rèn)值lr接收f(shuō)loat,表示學(xué)習(xí)率,默認(rèn)為<requiredparameter>momentum接收f(shuō)loat或optional,表示動(dòng)量因子,默認(rèn)為0隨機(jī)平均梯度下降(AveragedStochasticGradientDescent,ASGD)是隨時(shí)間記錄參數(shù)矢量平均值的隨機(jī)梯度下降。ASGD類的語(yǔ)法格式如下。torch.optim.ASGD(params,lr=0.01,lambd=0.0001,alpha=0.75,t0=1000000.0,weight_decay=0)優(yōu)化器3.ASGDASGD類常用的參數(shù)及其說(shuō)明如表所示。優(yōu)化器參數(shù)名稱說(shuō)明params接收iterable,表示用于優(yōu)化或定義參數(shù)組的參數(shù)表,無(wú)默認(rèn)值lr接收f(shuō)loat,表示學(xué)習(xí)率,默認(rèn)為0.01lambd接收f(shuō)loat,表示衰變項(xiàng),默認(rèn)為0.0001alpha接收f(shuō)loat,表示ETA更新的功率,默認(rèn)為0.75t0接收f(shuō)loat,表示開始進(jìn)行平均的點(diǎn),默認(rèn)為1000000.0weight_decay接收int,表示權(quán)重衰減,默認(rèn)為0自適應(yīng)梯度算法(AdaptiveGradientAlgorithm,AdaGrad)屬于逐參數(shù)適應(yīng)學(xué)習(xí)率的優(yōu)化器,針對(duì)不同的參數(shù)或不同的訓(xùn)練階段使用不同的學(xué)習(xí)率。AdaGrad優(yōu)化器的一個(gè)缺點(diǎn)是,在深度學(xué)習(xí)中,單調(diào)的學(xué)習(xí)率被證明會(huì)過(guò)于激進(jìn)且過(guò)早停止學(xué)習(xí)。AdaGrad的語(yǔ)法格式如下。torch.optim.Adagrad(params,lr=0.01,lr_decay=0,weight_decay=0,initial_accumulator_value=0)優(yōu)化器4.AdaGradAdagrad類的常用參數(shù)及其說(shuō)明如表所示。優(yōu)化器參數(shù)名稱說(shuō)明lr接收f(shuō)loat或optional,表示學(xué)習(xí)率,默認(rèn)值為0.01lr_decay接收f(shuō)loat,表示學(xué)習(xí)率衰減,默認(rèn)值為0weight_decay接收f(shuō)loat,表示權(quán)重衰減,默認(rèn)值為0均方根傳播(RootMeanSquarePropagation,RMSProp)優(yōu)化器是基于梯度的大小對(duì)每個(gè)權(quán)重的學(xué)習(xí)率進(jìn)行修改。與AdaGrad優(yōu)化器的學(xué)習(xí)率的修改方式不同,RMSProp不會(huì)讓學(xué)習(xí)率單調(diào)變小,其優(yōu)點(diǎn)在于,消除梯度下降過(guò)程中的擺動(dòng)加速梯度下降的過(guò)程。RMSProp類的語(yǔ)法格式如下。torch.optim.RMSprop(params,lr=0.01,alpha=0.99,eps=1e-08,weight_decay=0,momentum=0,centered=False)優(yōu)化器5.RMSPropRMSProp類的常用參數(shù)及其說(shuō)明如表所示。優(yōu)化器參數(shù)名稱說(shuō)明lr接收f(shuō)loat和optional,表示學(xué)習(xí)率,默認(rèn)值為0.01momentum接收int,表示動(dòng)量因子,默認(rèn)值為0alpha接收f(shuō)loat,表示平滑常數(shù),默認(rèn)值為0.99eps接收f(shuō)loat或optional,表示添加到分母以提高數(shù)值穩(wěn)定性的術(shù)語(yǔ),默認(rèn)值為1e-8centered接收bool,表示是否對(duì)梯度進(jìn)行歸一化,如果為真,則計(jì)算中心的RMSProp,通過(guò)估計(jì)其方差對(duì)梯度進(jìn)行歸一化。默認(rèn)值為Falseweight_decay接收f(shuō)loat或optional,表示權(quán)重衰減,默認(rèn)值為0自適應(yīng)矩估計(jì)(AdaptiveMomentEstimation,Adam)優(yōu)化器在RMSProp優(yōu)化器的基礎(chǔ)上計(jì)算梯度的指數(shù)加權(quán)平均值。Adam類的語(yǔ)法格式如下。torch.optim.Adam(params,lr=0.001,betas=(0.9,0.999),eps=1e-08,weight_decay=0,amsgrad=False)優(yōu)化器6.AdamAdam類的常用參數(shù)及其說(shuō)明如表所示。優(yōu)化器參數(shù)名稱說(shuō)明lr接收f(shuō)loat或optional,表示學(xué)習(xí)率,默認(rèn)為0.001betas接收元組或optional,表示用于計(jì)算梯度及其平方的運(yùn)行平均值的系數(shù),默認(rèn)為(0.9,0.999)eps接收f(shuō)loat或optional,表示添加到分母以提高數(shù)值穩(wěn)定性的術(shù)語(yǔ),默認(rèn)為1e-8weight_decay接收f(shuō)loat或optional,表示權(quán)重衰減,默認(rèn)為0amsgrad接收boolean或optional,表示是否使用AMSGrad的變種,默認(rèn)為False1優(yōu)化器目錄損失函數(shù)2編譯基于CNN的貓狗分類網(wǎng)絡(luò)3在2.2.3節(jié)中,已經(jīng)搭建了3個(gè)基于CNN的貓狗分類網(wǎng)絡(luò)的框架,本小節(jié)以3個(gè)網(wǎng)絡(luò)中的VGG網(wǎng)絡(luò)為例進(jìn)行相應(yīng)的編譯,網(wǎng)絡(luò)編譯的過(guò)程如下。編譯網(wǎng)絡(luò)前需要先實(shí)例化網(wǎng)絡(luò)。選擇優(yōu)化器以及優(yōu)化算法。本任務(wù)的優(yōu)化器選擇用Adam,另外,經(jīng)過(guò)控制變量法調(diào)試,在Epoch=3的情況下,學(xué)習(xí)率lr在等于0.00004的時(shí)效果較好。學(xué)習(xí)率的選擇是一個(gè)不斷嘗試的過(guò)程,常用的學(xué)習(xí)率為0.1、0.01、0.001,以此類推,可以一個(gè)數(shù)量級(jí)接著一個(gè)數(shù)量級(jí)地進(jìn)行嘗試,直到找到較優(yōu)的學(xué)習(xí)率。編譯基于CNN的貓狗分類網(wǎng)絡(luò)選擇損失函數(shù)。在貓狗分類任務(wù)中可以選擇交叉熵?fù)p失函數(shù)。將數(shù)據(jù)轉(zhuǎn)成能被GPU計(jì)算的類型。在編譯網(wǎng)絡(luò)時(shí)需要注意,訓(xùn)練數(shù)據(jù)和實(shí)例化的網(wǎng)絡(luò)必須位于一個(gè)相同的處理器,如CPU或GPU。配置梯度清零、前向傳播、計(jì)算誤差、反向傳播以及更新參數(shù)。編譯基于CNN的貓狗分類網(wǎng)絡(luò)訓(xùn)練網(wǎng)絡(luò)1批訓(xùn)練目錄迭代次數(shù)2訓(xùn)練基于CNN的貓狗分類網(wǎng)絡(luò)3網(wǎng)絡(luò)構(gòu)建和編譯完成后,即可將訓(xùn)練樣本傳入網(wǎng)絡(luò)進(jìn)行訓(xùn)練。在訓(xùn)練網(wǎng)絡(luò)過(guò)程中,可通過(guò)調(diào)整迭代次數(shù)、批訓(xùn)練等參數(shù)的值,對(duì)網(wǎng)絡(luò)訓(xùn)練過(guò)程進(jìn)行優(yōu)化。訓(xùn)練網(wǎng)絡(luò)時(shí),通過(guò)設(shè)置epochs參數(shù)調(diào)整訓(xùn)練中網(wǎng)絡(luò)的迭代次數(shù),epochs的值為多少就表示所有訓(xùn)練樣本被傳入網(wǎng)絡(luò)訓(xùn)練多少輪(如epochs為1,表示所有訓(xùn)練樣本被傳入網(wǎng)絡(luò)訓(xùn)練一輪)。當(dāng)設(shè)置的迭代次數(shù)的值過(guò)小時(shí),訓(xùn)練得到的模型效果較差,可以適當(dāng)增加迭代次數(shù)的大小,從而優(yōu)化模型的效果。但是

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論