機(jī)器學(xué)習(xí)原理與應(yīng)用電子教案 5.10.5深度學(xué)習(xí)實(shí)踐-孿生神經(jīng)網(wǎng)絡(luò)_第1頁(yè)
機(jī)器學(xué)習(xí)原理與應(yīng)用電子教案 5.10.5深度學(xué)習(xí)實(shí)踐-孿生神經(jīng)網(wǎng)絡(luò)_第2頁(yè)
機(jī)器學(xué)習(xí)原理與應(yīng)用電子教案 5.10.5深度學(xué)習(xí)實(shí)踐-孿生神經(jīng)網(wǎng)絡(luò)_第3頁(yè)
機(jī)器學(xué)習(xí)原理與應(yīng)用電子教案 5.10.5深度學(xué)習(xí)實(shí)踐-孿生神經(jīng)網(wǎng)絡(luò)_第4頁(yè)
機(jī)器學(xué)習(xí)原理與應(yīng)用電子教案 5.10.5深度學(xué)習(xí)實(shí)踐-孿生神經(jīng)網(wǎng)絡(luò)_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

備課日期:年月日授課時(shí)間課時(shí)(理論+實(shí)驗(yàn))周次星期:節(jié)次:授課課題深度學(xué)習(xí)[實(shí)踐-孿生神經(jīng)網(wǎng)絡(luò)]教學(xué)目標(biāo)1.理解孿生神經(jīng)網(wǎng)絡(luò)基本原理。2.掌握利用PyTorch框架實(shí)現(xiàn)孿生神經(jīng)網(wǎng)絡(luò)的基本方法。教學(xué)重點(diǎn)利用PyTorch框架實(shí)現(xiàn)孿生神經(jīng)網(wǎng)絡(luò)的基本方法。教學(xué)準(zhǔn)備PPT、點(diǎn)名冊(cè)等。教學(xué)方法指導(dǎo)閱讀、案例法。教學(xué)過(guò)程設(shè)計(jì)備注課題引入【思考】人類(lèi)如何區(qū)別相同的事物?【關(guān)鍵】特征相似度?!緯r(shí)間】分鐘?!局靼鍟?shū)】§5.10.5孿生神經(jīng)網(wǎng)絡(luò)---------------------------------------------------------------------------一、基本原理【主板書(shū)】基本原理1.基本機(jī)制:孿生神經(jīng)網(wǎng)絡(luò)(Siameseneuralnetwork)是是基于兩個(gè)神經(jīng)網(wǎng)絡(luò)建立的耦合構(gòu)架。以?xún)蓚€(gè)樣本為輸入,輸出其嵌入高維度空間的表征,以比較兩個(gè)樣本的相似程度。在監(jiān)督學(xué)習(xí)范式下,孿生神經(jīng)網(wǎng)絡(luò)會(huì)最大化不同標(biāo)簽的表征,并最小化相同標(biāo)簽的表征。在自監(jiān)督或非監(jiān)督學(xué)習(xí)范式下,孿生神經(jīng)網(wǎng)絡(luò)可以最小化原輸入和干擾輸入(例如原始圖像和該圖像的裁減)間的表征。2.孿生神經(jīng)網(wǎng)絡(luò)和偽孿生神經(jīng)網(wǎng)絡(luò)的適用場(chǎng)景區(qū)別:孿生神經(jīng)網(wǎng)絡(luò)用于處理兩個(gè)輸入"比較類(lèi)似"的情況。偽孿生神經(jīng)網(wǎng)絡(luò)適用于處理兩個(gè)輸入"有一定差別"的情況。3.孿生神經(jīng)網(wǎng)絡(luò)損失函數(shù):常規(guī)的孿生神經(jīng)網(wǎng)絡(luò)使用ContrastiveLoss?!緩?qiáng)化與拓展】對(duì)比損失函數(shù)的形式(Y=1與Y=0的情況分析、閾值的含義)?!綪PT】展示對(duì)比損失函數(shù)?!緩?qiáng)化與拓展】孿生神經(jīng)網(wǎng)絡(luò)將樣本的維度進(jìn)行轉(zhuǎn)換,在轉(zhuǎn)換后的維度空間中的任意兩樣本:如果是相同類(lèi)別,空間距離盡量接近;如果是不同類(lèi)別,空間距離大于某個(gè)間隔?!緯r(shí)間】分鐘?!咎釂?wèn)】。教學(xué)步驟及主要內(nèi)容二、編程實(shí)現(xiàn)目的:比較兩幅圖片是否相似,或者說(shuō)相似度是多少?1.構(gòu)造數(shù)據(jù)集原則:將同一個(gè)類(lèi)別圖片文件放置一個(gè)文件夾中。(1)兩個(gè)重要的函數(shù)Dataset類(lèi)是Pytorch中圖像數(shù)據(jù)集中最為重要的一個(gè)類(lèi),也是Pytorch中所有數(shù)據(jù)集加載類(lèi)中應(yīng)該繼承的父類(lèi)。其兩個(gè)私有成員函數(shù)必須被重載,否則將會(huì)觸發(fā)錯(cuò)誤提示:__getitem__(self,index)__len__(self)其中__len__應(yīng)該返回?cái)?shù)據(jù)集的大小,而__getitem__接收一個(gè)index,然后返回圖片數(shù)據(jù)和標(biāo)簽,這個(gè)index通常指的是一個(gè)list的index,這個(gè)list的每個(gè)元素就包含了圖片數(shù)據(jù)的路徑和標(biāo)簽信息。(2)獲取類(lèi)別標(biāo)簽〖PPT〗演示defget_label_from_image_path(image_path):returnint(os.path.split(image_path)[0].split('\\')[-1])(3)__getitem__與__len__函數(shù)的實(shí)現(xiàn)classMyDataSet(Dataset):def__init__(self,image_folder,transform=None,should_invert=True):self.image_folder=image_folder#存放圖片的文件夾self.transform=transform#預(yù)處理self.should_invert=should_invert#通道反轉(zhuǎn)self.image_list=glob.glob(self.image_folder+'/*/*.jpg')#列表def__getitem__(self,index):same_class_yn=random.randint(0,1)#相似1或不相似0im_1_path=random.choice(self.image_list)#隨機(jī)選1幅圖片im_1_label=get_label_from_image_path(im_1_path)#圖片標(biāo)簽ifsame_class_yn:#抽取與im_1屬于同一類(lèi)的圖片whileTrue:im_2_path=random.choice(self.image_list)im_2_label=get_label_from_image_path(im_2_path)ifim_1_label==im_2_label:breakelse:whileTrue:im_2_path=random.choice(self.image_list)im_2_label=get_label_from_image_path(im_2_path)ifim_1_label!=im_2_label:break#讀取圖片im_1=Image.open(im_1_path)im_2=Image.open(im_2_path)#是否進(jìn)行通道反轉(zhuǎn)ifself.should_invert:im_1=PIL.ImageOps.invert(im_1)im_2=PIL.ImageOps.invert(im_2)#是否進(jìn)行預(yù)處理ifself.transformisnotNone:im_1=self.transform(im_1)im_2=self.transform(im_2)returnim_1,im_2,same_class_yndef__len__(self):returnlen(self.image_list)(4)加載數(shù)據(jù)#定義預(yù)處理操作transform=transforms.Compose([transforms.Grayscale(num_output_channels=1),#轉(zhuǎn)成單通道transforms.ToTensor(),#轉(zhuǎn)為T(mén)ensortransforms.Normalize((0.5,),(0.5,)),#歸一化])train_dir="E:\\DATA\\CIFAR\\train\\"#訓(xùn)練集文件夾train_dataset=MyDataSet(image_folder=train_dir,transform=transform,should_invert=False)train_dataloader=DataLoader(train_dataset,shuffle=True,batch_size=32)test_dir="E:\\DATA\\CIFAR\\test\\"#訓(xùn)練集文件夾test_dataset=MyDataSet(image_folder=test_dir,transform=transform,should_invert=False)test_dataloader=DataLoader(test_dataset,shuffle=True,batch_size=32)#讀取數(shù)據(jù)集test_set=enumerate(test_dataloader)ix,test_im_label=next(test_set)ims_1=test_im_label[0]print(ims_1.size())>>torch.Size([32,1,32,32])ims_2=test_im_label[1]print(ims_2.size())>>torch.Size([32,1,32,32])label=test_im_label[2]print(label)defshow_image(im):plt.figure()im=im/2+0.5im=im.numpy()plt.imshow(np.transpose(im,(1,2,0)))plt.show()#提取圖片ix=5#指定序號(hào)im_1=ims_1[ix,:]#第ix幅圖片show_image(im_1)im_2=ims_2[ix,:]#第ix幅圖片show_image(im_2)print(label[ix])>>02.構(gòu)造孿生神經(jīng)網(wǎng)絡(luò)classSiameseNetwork(nn.Module):def__init__(self):super().__init__()n1=nn.Sequential(nn.ReflectionPad2d(1),nn.Conv2d(1,5,3,1),nn.ReLU(),nn.BatchNorm2d(5),nn.ReflectionPad2d(1),nn.Conv2d(5,10,3,1),nn.ReLU(),nn.BatchNorm2d(10),nn.ReflectionPad2d(1),nn.Conv2d(10,20,3,1),nn.ReLU(inplace=True),nn.BatchNorm2d(20),)self.fc1=nn.Sequential(nn.Linear(32*32*20,100),nn.ReLU(),nn.Linear(100,50),nn.ReLU(),nn.Linear(50,5))defforward_once(self,x):output=n1(x)output=output.view(output.size()[0],-1)output=self.fc1(output)returnoutputdefforward(self,x1,x2):output1=self.forward_once(x1)output2=self.forward_once(x2)returnoutput1,output2net=SiameseNetwork()#定義模型【強(qiáng)化與拓展】BatchNorm2d與MaxPool2d函數(shù)使用方法。classtorch.nn.BatchNorm2d(num_features,eps=1e-05,momentum=0.1,affine=True)classtorch.nn.ReflectionPad2d(padding)3.定義損失函數(shù)classContrastiveLoss(torch.nn.Module):def__init__(self,margin=2.0):super(ContrastiveLoss,self).__init__()self.margin=margindefforward(self,x1,x2,label):euclidean_distance=F.pairwise_distance(x1,x2,keepdim=True)loss=torch.mean((1-label)*torch.pow(euclidean_distance,2)+(label)*torch.pow(torch.clamp(self.margin-euclidean_distance,min=0.0),2))returnlossloss=ContrastiveLoss()#定義損失函數(shù)4.定義優(yōu)化器optimizer=optim.Adam(net.parameters(),lr=0.001)#優(yōu)化器5.模型訓(xùn)練T=100forepochinrange(T):Loss_Sum=0.0#累積訓(xùn)練誤差fori,datainenumerate(train_dataloader,1):im_1,im_2,label=data output1,output2=net(im_1,im_2)L=loss(output1,output2,label)optimizer.zero_grad()L.backwar

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論