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

下載本文檔

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

文檔簡介

備課日期:年月日授課時間課時(理論+實驗)周次星期:節(jié)次:授課課題深度學(xué)習(xí)[實踐-孿生神經(jīng)網(wǎng)絡(luò)]教學(xué)目標(biāo)1.理解孿生神經(jīng)網(wǎng)絡(luò)基本原理。2.掌握利用PyTorch框架實現(xiàn)孿生神經(jīng)網(wǎng)絡(luò)的基本方法。教學(xué)重點利用PyTorch框架實現(xiàn)孿生神經(jīng)網(wǎng)絡(luò)的基本方法。教學(xué)準(zhǔn)備PPT、點名冊等。教學(xué)方法指導(dǎo)閱讀、案例法。教學(xué)過程設(shè)計備注課題引入【思考】人類如何區(qū)別相同的事物?【關(guān)鍵】特征相似度?!緯r間】分鐘?!局靼鍟俊?.10.5孿生神經(jīng)網(wǎng)絡(luò)---------------------------------------------------------------------------一、基本原理【主板書】基本原理1.基本機制:孿生神經(jīng)網(wǎng)絡(luò)(Siameseneuralnetwork)是是基于兩個神經(jīng)網(wǎng)絡(luò)建立的耦合構(gòu)架。以兩個樣本為輸入,輸出其嵌入高維度空間的表征,以比較兩個樣本的相似程度。在監(jiān)督學(xué)習(xí)范式下,孿生神經(jīng)網(wǎng)絡(luò)會最大化不同標(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ò)的適用場景區(qū)別:孿生神經(jīng)網(wǎng)絡(luò)用于處理兩個輸入"比較類似"的情況。偽孿生神經(jīng)網(wǎng)絡(luò)適用于處理兩個輸入"有一定差別"的情況。3.孿生神經(jīng)網(wǎng)絡(luò)損失函數(shù):常規(guī)的孿生神經(jīng)網(wǎng)絡(luò)使用ContrastiveLoss?!緩娀c拓展】對比損失函數(shù)的形式(Y=1與Y=0的情況分析、閾值的含義)?!綪PT】展示對比損失函數(shù)?!緩娀c拓展】孿生神經(jīng)網(wǎng)絡(luò)將樣本的維度進(jìn)行轉(zhuǎn)換,在轉(zhuǎn)換后的維度空間中的任意兩樣本:如果是相同類別,空間距離盡量接近;如果是不同類別,空間距離大于某個間隔?!緯r間】分鐘?!咎釂枴俊=虒W(xué)步驟及主要內(nèi)容二、編程實現(xiàn)目的:比較兩幅圖片是否相似,或者說相似度是多少?1.構(gòu)造數(shù)據(jù)集原則:將同一個類別圖片文件放置一個文件夾中。(1)兩個重要的函數(shù)Dataset類是Pytorch中圖像數(shù)據(jù)集中最為重要的一個類,也是Pytorch中所有數(shù)據(jù)集加載類中應(yīng)該繼承的父類。其兩個私有成員函數(shù)必須被重載,否則將會觸發(fā)錯誤提示:__getitem__(self,index)__len__(self)其中__len__應(yīng)該返回數(shù)據(jù)集的大小,而__getitem__接收一個index,然后返回圖片數(shù)據(jù)和標(biāo)簽,這個index通常指的是一個list的index,這個list的每個元素就包含了圖片數(shù)據(jù)的路徑和標(biāo)簽信息。(2)獲取類別標(biāo)簽〖PPT〗演示defget_label_from_image_path(image_path):returnint(os.path.split(image_path)[0].split('\\')[-1])(3)__getitem__與__len__函數(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)#隨機選1幅圖片im_1_label=get_label_from_image_path(im_1_path)#圖片標(biāo)簽ifsame_class_yn:#抽取與im_1屬于同一類的圖片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)為Tensortransforms.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#指定序號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()#定義模型【強化與拓展】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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論