深度學(xué)習(xí)基礎(chǔ)與實(shí)踐 教案5.4 任務(wù)實(shí)施(操作參考)_第1頁(yè)
深度學(xué)習(xí)基礎(chǔ)與實(shí)踐 教案5.4 任務(wù)實(shí)施(操作參考)_第2頁(yè)
深度學(xué)習(xí)基礎(chǔ)與實(shí)踐 教案5.4 任務(wù)實(shí)施(操作參考)_第3頁(yè)
深度學(xué)習(xí)基礎(chǔ)與實(shí)踐 教案5.4 任務(wù)實(shí)施(操作參考)_第4頁(yè)
深度學(xué)習(xí)基礎(chǔ)與實(shí)踐 教案5.4 任務(wù)實(shí)施(操作參考)_第5頁(yè)
已閱讀5頁(yè),還剩10頁(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)介

.4任務(wù)實(shí)施:手勢(shì)識(shí)別5.4.1任務(wù)書使用PyTorch完成手勢(shì)識(shí)別任務(wù),主要包含以下內(nèi)容:讀取數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行處理;將數(shù)據(jù)分類成訓(xùn)練集和測(cè)試集,并將它們都轉(zhuǎn)化為DataLoader;構(gòu)建cnn網(wǎng)絡(luò);通過(guò)分類得到的訓(xùn)練集數(shù)據(jù)訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)網(wǎng)絡(luò)模型;使用test數(shù)據(jù)測(cè)試模型,同時(shí)記錄準(zhǔn)確率。當(dāng)準(zhǔn)確率達(dá)到0.975,記錄入模型參數(shù);繼續(xù)訓(xùn)練,當(dāng)準(zhǔn)確率達(dá)到0.983,停止循環(huán)。5.4.2任務(wù)分組表5-5學(xué)生任務(wù)分配表班級(jí)組號(hào)指導(dǎo)老師組長(zhǎng)學(xué)號(hào)成員數(shù)量組長(zhǎng)任務(wù)組員姓名學(xué)號(hào)任務(wù)分工5.4.3獲取信息引導(dǎo)問題1:自主學(xué)習(xí),總結(jié)基于Pytorch環(huán)境完成深度學(xué)習(xí)任務(wù)的基本流程。Pytoch完成深度學(xué)習(xí)任務(wù)可以劃分成一下步驟:步驟1:導(dǎo)包步驟2:加載數(shù)據(jù)步驟3:模型構(gòu)建步驟4:損失函數(shù)與優(yōu)化器設(shè)置步驟5:模型訓(xùn)練引導(dǎo)問題2:查閱相關(guān)資料,了解手勢(shì)識(shí)別項(xiàng)目背景,明確目標(biāo)與意義。在計(jì)算機(jī)科學(xué)中,手勢(shì)識(shí)別是通過(guò)數(shù)學(xué)算法來(lái)識(shí)別人類手勢(shì)的一個(gè)議題。手勢(shì)識(shí)別可以來(lái)自人的身體各部位的運(yùn)動(dòng),但一般是指臉部和手的運(yùn)動(dòng)。用戶可以使用簡(jiǎn)單的手勢(shì)來(lái)控制或與設(shè)備交互,讓計(jì)算機(jī)理解人類的行為。其核心技術(shù)為手勢(shì)分割、手勢(shì)分析以及手勢(shì)識(shí)別。應(yīng)用場(chǎng)景:家庭娛樂:在電視手勢(shì)識(shí)別方面,三星、康佳、TCL等電視廠商都已經(jīng)推出了帶有手勢(shì)識(shí)別的電視機(jī)產(chǎn)品,直接用掌心揮動(dòng)、握拳抓取、左右揮動(dòng)、雙拳合作等手勢(shì)來(lái)完成移動(dòng)控制、選擇確認(rèn)、切換頁(yè)面、縮放和旋轉(zhuǎn)等功能;而在游戲機(jī)方面比較著名的則是微軟的游戲機(jī)Xbox。Xbox游戲機(jī)的手勢(shì)識(shí)別主要由Kinect來(lái)完成,Kinect是一種3D體感攝影機(jī),上面集成了可以識(shí)別用戶動(dòng)作及表情的攝像頭和紅外傳感器,用戶只需通過(guò)扭動(dòng)身體部位即可達(dá)到控制游戲中角色的效果。智能駕駛:駕駛中與中控的互動(dòng)一直被認(rèn)為是不安全因素之一,其主要原因就在于人機(jī)交互過(guò)程吸引了駕駛者過(guò)多的注意力,這方面語(yǔ)音交互方案的呼聲比較高漲,應(yīng)用也較多,而手勢(shì)識(shí)別作為另一種替代方案也被很多大牌廠商重視。在15年的CES展上,寶馬展出了最新iDrive系統(tǒng),其重要變化之一就是引入了手勢(shì)識(shí)別功能,通過(guò)安裝在車頂上的3D傳感器對(duì)駕駛員手勢(shì)的識(shí)別,實(shí)現(xiàn)對(duì)車輛導(dǎo)航、信息娛樂系統(tǒng)的控制;而在今年的后市場(chǎng)展會(huì)上,善領(lǐng)科技發(fā)布的新一代安全后視鏡產(chǎn)品X750D上也同樣集成了手勢(shì)識(shí)別的功能。5.4.3工作實(shí)施引導(dǎo)問題3:完成手勢(shì)識(shí)別所需項(xiàng)目環(huán)境的搭建。1)新建項(xiàng)目創(chuàng)建實(shí)驗(yàn)檢測(cè)路徑及文件:在實(shí)驗(yàn)環(huán)境的桌面右鍵點(diǎn)擊“創(chuàng)建文件夾(F)…”,輸入文件夾名稱為“test6”。打開“test6”文件夾如圖5-7所示,會(huì)顯示其路徑“/home/techuser/Desktop/test6”,如圖5-9所示圖5-9創(chuàng)建實(shí)驗(yàn)檢測(cè)路徑及文件雙擊桌面中的“pycharm”圖標(biāo),在彈出的界面中點(diǎn)擊“close”按鈕。在文件夾“test6”中新建一個(gè)工程,左鍵單擊左上角“file”按鈕,然后點(diǎn)擊“open”按鈕。選擇路徑“/home/techuser/Desktop/test6”,點(diǎn)擊“ok”按鈕,如圖5-10所示。圖5-10選擇路徑2)配置項(xiàng)目conda虛擬環(huán)境。在彈出框中左鍵點(diǎn)擊“ThisWindow”配置conda虛擬環(huán)境。左鍵點(diǎn)擊“file”,再左鍵點(diǎn)擊“Settings”如圖5-11所示圖5-11配置conda虛擬環(huán)境(1)左鍵點(diǎn)擊圖5-12中的“Projcet:test6”按鈕,再左鍵點(diǎn)擊“ProjectInterpreter”按鈕。在右側(cè)的紅框處,選擇到conda的虛擬環(huán)境“Course”路徑下,然后左鍵點(diǎn)擊“ok”按鈕。圖5-12配置conda虛擬環(huán)境(2)在“pycharm”界面的右下角出現(xiàn)圖5-13中紅框中的內(nèi)容即為conda環(huán)境配置正確。圖5-13conda虛擬環(huán)境配置(3)3)新建本文所需的Python文件。右鍵點(diǎn)擊pychram中的“test6”按鈕,左鍵單擊“new”,再單擊“PythonFile”按鈕,在框中輸入“test6”,敲擊回車,則會(huì)得到“test6.py”文件。圖5-14新建Python文件引導(dǎo)問題4:完成數(shù)據(jù)集的下載,觀察數(shù)據(jù)集的結(jié)構(gòu),對(duì)數(shù)據(jù)集進(jìn)行分析、補(bǔ)充并記錄在框內(nèi)。數(shù)據(jù)下載地址:“/file/2667/sign_mnist_train.csv”。也可以在“/datamunge/sign-language-mnist”下載,該網(wǎng)址是公網(wǎng)中的網(wǎng)址,在自己的電腦也可以下載。(這兩個(gè)下載的操作執(zhí)行一個(gè)即可。)將該數(shù)據(jù)集放在“/home/techuser/Desktop/test/”路徑下。下載到的手勢(shì)識(shí)別數(shù)據(jù)集如圖5-15所示:圖5-15手勢(shì)識(shí)別數(shù)據(jù)集手勢(shì)識(shí)別數(shù)據(jù)集結(jié)構(gòu)特點(diǎn):數(shù)據(jù)是csv格式的,第一列是標(biāo)簽,其余列表示像素即圖片數(shù)據(jù)。圖形大小為28*28,與MNIST數(shù)據(jù)集圖片大小一致。類別總共有26類4、總共有27455條數(shù)據(jù)引導(dǎo)問題5:查閱資料了解sklearn庫(kù)的基本概念、特點(diǎn)等信息,利用國(guó)內(nèi)鏡像源完成sklearn庫(kù)的安裝。sklearn庫(kù)的特點(diǎn):Scikit-learn(sklearn)是機(jī)器學(xué)習(xí)中常用的第三方模塊,對(duì)常用的機(jī)器學(xué)習(xí)方法進(jìn)行了封裝,包括回歸、降維、分類、聚類等方法。Sklearn是簡(jiǎn)單高效的數(shù)據(jù)挖掘和數(shù)據(jù)分析工具。sklearn庫(kù)的安裝步驟:步驟1:打開終端—在桌面右鍵,選擇“OpenTerminalHere”步驟2:激活實(shí)驗(yàn)環(huán)境—CondaactivateCourse步驟3:通過(guò)pip命令安裝sklearn—pipinstallsklearn-i/simple步驟4:觀察結(jié)果引導(dǎo)問題6:導(dǎo)入手勢(shì)識(shí)別需要的第三方庫(kù),查閱資料,了解導(dǎo)入的第三方庫(kù)的基本功能。列出需要的第三方庫(kù):importtorchimporttorch.optimimporttorch.nnasnnfromtorch.autogradimportVariablefromtorch.utils.dataimportTensorDataset,DataLoaderfromsklearn.model_selectionimporttrain_test_splitimportnumpyasnpimportpandasaspd第三方庫(kù)的基本作用:1.torch包,包含了多維張量的數(shù)據(jù)結(jié)構(gòu)以及基于其上的多種數(shù)學(xué)操作。另外,它也提供了多種工具,其中一些可以更有效地對(duì)張量和任意類型進(jìn)行序列化。2.torch.optim是一個(gè)實(shí)現(xiàn)了各種優(yōu)化算法的庫(kù)。大部分常用的方法得到支持,并且接口具備足夠的通用性,使得未來(lái)能夠集成更加復(fù)雜的方法。3.torch.nn是pytorch中自帶的一個(gè)函數(shù)庫(kù),里面包含了神經(jīng)網(wǎng)絡(luò)中使用的一些常用函數(shù)。4.Variable是torch.autograd中很重要的類。它用來(lái)包裝Tensor,將Tensor轉(zhuǎn)換為Variable之后,可以裝載梯度信息。5.TensorDataset與DataLoader用于對(duì)數(shù)據(jù)集進(jìn)行加載進(jìn)加載器。6.train_test_split函數(shù)用于對(duì)數(shù)據(jù)進(jìn)行劃分。7.NumPy(NumericalPython)是Python的一種開源的數(shù)值計(jì)算擴(kuò)展。這種工具可用來(lái)存儲(chǔ)和處理大型矩陣,比Python自身的嵌套列表(nestedliststructure)結(jié)構(gòu)要高效得多(該結(jié)構(gòu)也可以用來(lái)表示矩陣(matrix)),支持大量的維度數(shù)組與矩陣運(yùn)算,此外也針對(duì)數(shù)組運(yùn)算提供大量的數(shù)學(xué)函數(shù)庫(kù)。8.Pandas是基于NumPy的一種工具,該工具是為了解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的。Pandas納入了大量庫(kù)和一些標(biāo)準(zhǔn)的數(shù)據(jù)模型,提供了高效操作大型數(shù)據(jù)集所需的工具。Pndas提供了大量能使我們快速便捷地處理數(shù)據(jù)的函數(shù)和方法。它是使Python成為強(qiáng)大而高效的數(shù)據(jù)分析環(huán)境的重要因素之一。引導(dǎo)問題7:從csv文件中加載數(shù)據(jù)集到程序中,列出相應(yīng)的步驟并完成代碼編寫,記錄代碼編寫中出現(xiàn)的問題及解決方法。數(shù)據(jù)集加載的步驟步驟1:通過(guò)pandas讀取csv文件。步驟2:將訓(xùn)練數(shù)據(jù)中的label賦予y。步驟3:將訓(xùn)練數(shù)據(jù)中除去label中的數(shù)據(jù)歸一化后賦予x。步驟4:將數(shù)據(jù)按照比例分為訓(xùn)練和測(cè)試數(shù)據(jù)。步驟5:轉(zhuǎn)換成Longtensor,交叉熵?fù)p失函數(shù)的label需要long類型的數(shù)據(jù)。步驟6:利用TensorDataset函數(shù)將tensor數(shù)據(jù)變成TensorDataset數(shù)據(jù),也就是將數(shù)據(jù)變成PyTorch可以分批次加載的數(shù)據(jù)。代碼編寫:train=pd.read_csv('sign_mnist_train.csv',dtype=np.float32)y=train.label.valuesx=train.loc[:,train.columns!='label'].values/255train_x,test_x,train_y,test_y=train_test_split(x,y,test_size=0.2,random_state=42)print(test_x.shape)train_x=torch.from_numpy(train_xtrain_y=torch.from_numpy(train_y).type(torch.LongTensor)test_x=torch.from_numpy(test_x)test_y=torch.from_numpy(test_y).type(torch.LongTensor)train=TensorDataset(train_x,train_y)test=TensorDataset(test_x,test_y)出現(xiàn)的問題及解決的方法:學(xué)生根據(jù)出現(xiàn)的問題進(jìn)行記錄引導(dǎo)問題8:根據(jù)模型結(jié)構(gòu)說(shuō)明,完成神經(jīng)網(wǎng)絡(luò)模型構(gòu)建和實(shí)例化,記錄代碼編寫中出現(xiàn)的問題及解決方法。模型結(jié)構(gòu)說(shuō)明:整體:模型整體分為5層結(jié)構(gòu),每一層結(jié)構(gòu)利用nn.Sequential進(jìn)行組合。第一層:卷積操作(輸入通道為1,輸出通道為16,3*3的卷積核,步長(zhǎng)為1,填充1層)、歸一化處理、Relu激活。第二層:卷積操作(輸入通道為16,輸出通道為32,3*3的卷積核,步長(zhǎng)為1,填充1層)、歸一化處理、Relu激活、最大池化(2*2的池化核,步長(zhǎng)為2)。第三層:卷積操作(輸入通道為32,輸出通道為64,3*3的卷積核,步長(zhǎng)為1,填充1層)、歸一化處理、Relu激活、最大池化(2*2的池化核,步長(zhǎng)為2)。第四層:卷積操作(輸入通道為64,輸出通道為128,3*3的卷積核,步長(zhǎng)為1,填充1層)、歸一化處理、Relu激活。第五層:全連接層,線性變換(輸入維度7*7*128,輸出維度1024)、Relu激活、線性變換(輸入維度1024,輸出維度100)、Relu激活、線性變換(輸入維度100,輸出維度26)代碼編寫:classCNN(nn.Module):def__init__(self):super(CNN,self).__init__()#第一層self.layers1=nn.Sequential(#卷積nn.Conv2d(1,16,kernel_size=3,stride=1,padding=1),#歸一化處理nn.BatchNorm2d(16),#激活nn.ReLU(inplace=True))#第二層self.layers2=nn.Sequential(#卷積nn.Conv2d(16,32,kernel_size=3,stride=1,padding=1),#歸一化處理nn.BatchNorm2d(32),#激活nn.ReLU(inplace=True),#池化nn.MaxPool2d(kernel_size=2,stride=2))#第三層self.layers3=nn.Sequential(#卷積nn.Conv2d(32,64,kernel_size=3,stride=1,padding=1),#歸一化nn.BatchNorm2d(64),#激活nn.ReLU(inplace=True),#池化nn.MaxPool2d(kernel_size=2,stride=2))#第四層self.layers4=nn.Sequential(nn.Conv2d(64,128,kernel_size=3,stride=1,padding=1),nn.BatchNorm2d(128),nn.ReLU(inplace=True),)self.fc=nn.Sequential(#設(shè)置全連接層nn.Linear(7*7*128,1024),nn.ReLU(inplace=True),nn.Linear(1024,100),nn.ReLU(inplace=True),nn.Linear(100,26))#前向傳播函數(shù)defforward(self,x):x=self.layers1(x)x=self.layers2(x)x=self.layers3(x)x=self.layers4(x)x=x.view(x.size(0),-1)x=self.fc(x)returnxcnn=CNN()出現(xiàn)的問題及解決的方法:學(xué)生根據(jù)出現(xiàn)的問題進(jìn)行記錄引導(dǎo)問題9:選擇手勢(shì)識(shí)別的損失函數(shù)和優(yōu)化器,設(shè)置學(xué)習(xí)率等參數(shù),完成代碼編寫。損失函數(shù)選擇:error=nn.CrossEntropyLoss()優(yōu)化器選擇:optimizer=torch.optim.SGD(cnn.parameters(),lr=0.1)引導(dǎo)問題10:使用訓(xùn)練數(shù)據(jù)訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型,用測(cè)試數(shù)據(jù)測(cè)試模型。根據(jù)準(zhǔn)確率對(duì)模型進(jìn)行評(píng)估,當(dāng)準(zhǔn)確率達(dá)到0.975,記錄入模型參數(shù);繼續(xù)訓(xùn)練,當(dāng)準(zhǔn)確率達(dá)到0.983,停止循環(huán)。記錄模型訓(xùn)練的和測(cè)試的步驟,完成代碼編寫,記錄出現(xiàn)的問題及解決方法。代碼編寫:forepochsinrange(100):#將train_loader組合為一個(gè)索引序列,同時(shí)列出數(shù)據(jù)和數(shù)據(jù)下標(biāo)fori,(img,label)inenumerate(train_loader):img=img.view(100,1,28,28)img=Variable(img)label=Variable(label)#梯度清零optimizer.zero_grad()#通過(guò)模型得到預(yù)測(cè)值output=cnn(img)#計(jì)算errorloss=error(output,label)#反向傳播,計(jì)算當(dāng)前梯度;loss.backward()#更新所有的參數(shù),optimizer.step()#一旦梯度被如backward()之類的函數(shù)計(jì)算好后,我們就可以調(diào)用這個(gè)函數(shù)。ifiP==0:#初始化arruracy,正確的數(shù)目accuracy=0#遍歷測(cè)試數(shù)據(jù)forx,yintest_loader:x=x.view(100,1,28,28)x=Variable(x)#通過(guò)模型得到數(shù)據(jù)out=cnn(x)#得到預(yù)測(cè)值pre=torch.max(out.data,1)[1]#得到正確的數(shù)目accuracy+=(pre

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論