人工智能及大數(shù)據(jù)學(xué)習(xí)pytorch源碼解讀之torchvision.models_第1頁(yè)
人工智能及大數(shù)據(jù)學(xué)習(xí)pytorch源碼解讀之torchvision.models_第2頁(yè)
人工智能及大數(shù)據(jù)學(xué)習(xí)pytorch源碼解讀之torchvision.models_第3頁(yè)
人工智能及大數(shù)據(jù)學(xué)習(xí)pytorch源碼解讀之torchvision.models_第4頁(yè)
人工智能及大數(shù)據(jù)學(xué)習(xí)pytorch源碼解讀之torchvision.models_第5頁(yè)
已閱讀5頁(yè),還剩16頁(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)介

1、s20180121 日 13:28:35深度學(xué)習(xí)PyTorchPyTorch3s.transforms3考:。這篇博客介紹s。simport m=這樣就導(dǎo)入了resnet50s20180121 日 13:28:35深度學(xué)習(xí)PyTorchPyTorch3s.transforms3考:。這篇博客介紹s。simport m=這樣就導(dǎo)入了resnet50m= 如果要導(dǎo)入densenetdensenet169m= 由于pretrained 參數(shù)默認(rèn)是False=m接下來(lái)以導(dǎo)入resnet50。運(yùn)行 的時(shí)候,是通過(guò)s的_zoo變量定義了可以從外部imports.resnet50()來(lái)調(diào)用的原因。_urls

2、如果要導(dǎo)入densenetdensenet169m= 由于pretrained 參數(shù)默認(rèn)是False=m接下來(lái)以導(dǎo)入resnet50。運(yùn)行 的時(shí)候,是通過(guò)s的_zoo變量定義了可以從外部imports.resnet50()來(lái)調(diào)用的原因。_urlsimport torch.nnas import import _zooas all =ResNet,resnet18,resnet34,resnet50,接下來(lái)就是resnet50pretrained 默認(rèn)是False=ResNet(Bottleneck,接下來(lái)就是resnet50pretrained 默認(rèn)是False=ResNet(Bottlene

3、ck,3,4,6,3,_urls=resnet18:resnet34:resnet50:resnet101:另外一個(gè)構(gòu)建bottleneck 的類,在ResNet結(jié)構(gòu),這些子結(jié)構(gòu)就是通過(guò)Bottleneck數(shù)pretrained 是True,那么就會(huì)通過(guò)_zoo.py 中的load_urlm_urls或?qū)胂鄳?yīng)的預(yù)訓(xùn)練模型。最后通過(guò)調(diào)用的e_dict另外一個(gè)構(gòu)建bottleneck 的類,在ResNet結(jié)構(gòu),這些子結(jié)構(gòu)就是通過(guò)Bottleneck數(shù)pretrained 是True,那么就會(huì)通過(guò)_zoo.py 中的load_urlm_urls或?qū)胂鄳?yīng)的預(yù)訓(xùn)練模型。最后通過(guò)調(diào)用的e_dict法就

4、是PyTorche_dict 方法還有一個(gè)重要的參數(shù)是strictTrue預(yù)訓(xùn)練模型的層和你的網(wǎng)絡(luò)結(jié)構(gòu)層嚴(yán)格對(duì)應(yīng)相等(比如層名和維度)defresnet50(pretrained=False,*kwargs): Constructs a ResNet-50 mpretrained(bool):IfTrue,returnsapre-trainedon=ResNet(Bottleneck,3,4,6,3,if return 其他resnet18、resnet101 等函數(shù)和resnet501構(gòu)建網(wǎng)絡(luò)結(jié)構(gòu)的時(shí)候block 的參數(shù)不一樣,比如resnet18222其他resnet18、resnet10

5、1 等函數(shù)和resnet501構(gòu)建網(wǎng)絡(luò)結(jié)構(gòu)的時(shí)候block 的參數(shù)不一樣,比如resnet18222resnet1013423, 3。2、調(diào)用的block 類不一樣,比如在resnet50resnet101resnet152 中調(diào)用的是Bottleneckresnet18 和中調(diào)用的是BasicBlockresidual型的話_urlsdefresnet18(pretrained=False,*kwargs): Constructs a ResNet-18 mpretrained(bool):IfTrue,returnsapre-trainedon=ResNet(BasicBlock,2,2,

6、2,2,if return defresnet101(pretrained=False,ConstructsaResNet-101.return defresnet101(pretrained=False,ConstructsaResNet-101.pretrained(bool):IfTrue,returnsapre-trainedon=ResNet(Bottleneck,3,4,3,mif return 構(gòu)建ResNet 網(wǎng)絡(luò)是通過(guò)ResNet 這個(gè)類進(jìn)行的。首先還是繼承PyTorch絡(luò)的基類:torch.nn.Module,其次主要的是重寫(xiě)初始化 init 和forward法。在初始化

7、init 中主要是定義一些層的參數(shù)。forward有方法用來(lái)模塊化一些操作,比如這里的_make_layer 方法是用來(lái)構(gòu)建構(gòu)建ResNet 網(wǎng)絡(luò)是通過(guò)ResNet 這個(gè)類進(jìn)行的。首先還是繼承PyTorch絡(luò)的基類:torch.nn.Module,其次主要的是重寫(xiě)初始化 init 和forward法。在初始化 init 中主要是定義一些層的參數(shù)。forward有方法用來(lái)模塊化一些操作,比如這里的_make_layer 方法是用來(lái)構(gòu)建4 個(gè)blocks。_make_layer 方法的第一個(gè)輸入block 是blocks 中包含多少個(gè)residuallayers 這個(gè)列表就是前面的3463_mak

8、e_layer1 將每個(gè)blocksresidual結(jié)構(gòu)保存在layers2、for i in 將每個(gè)blocksresidual結(jié)構(gòu)保存在layers2、for i in planes)的剩下residual 結(jié)構(gòu)保存在layersblocks這兩行代碼中都是通過(guò)Bottleneck 這個(gè)類來(lái)完成每個(gè)residual介紹Bottleneckclassdef init (self,block,layers,num_classes=1000): self.inplanes = 64super(ResNet,self). init self.conv1=nn.Conv2d(3,64,kernel_

9、size=7,stride=2,self.bn1 = nn.BatchNorm2d(64) self.relu =nn.ReLU(inplace=True)self.maxpool =nn.MaxPool2d(kernel_size=3,stride=2,padding=1) self.layer1 = self._make_layer(block, 64, layers0)self.layer2=self._make_layer(block,128,layers1,stride=2) self.layer3=self._make_layer(block,256,layers2,stride=

10、2) self.layer4=self._make_layer(block,512,layers3,stride=2) self.avgpool = nn.AvgPool2d(7, stride=1)self.fc =nn.Linear(512 *block.expan ,formin ifisinstance(m,n=m.kernel_size0*m.kernel_size1*m.weight.data.normal_(0,math.sqrt(n=m.kernel_size0*m.kernel_size1*m.weight.data.normal_(0,math.sqrt(2. /elifi

11、sinstance(m,def_make_layer(self,block,planes,blocks,le=ifstride!=1 or self.inplanes !=planes*:le=nn.Conv2d(self.inplanes,planes*,kernel_size=1,stride=stride,nn.BatchNorm2d(planes*)layers=layers.append(block(self.inplanes,planes,self.inplanes =planes*foriin range(1, returndefforward(self,x =x=x=x=x=x

12、=xx=x=x=x=x=x=x=x=x=x=return從前面的ResNet 類可以看出,在構(gòu)造ResNetBottleneck 這個(gè)類,因?yàn)镽esNet 是由residual 結(jié)構(gòu)組成的,而類就是完成residual 結(jié)構(gòu)的構(gòu)建。同樣Bottlenecttorch.nn.Module init從前面的ResNet 類可以看出,在構(gòu)造ResNetBottleneck 這個(gè)類,因?yàn)镽esNet 是由residual 結(jié)構(gòu)組成的,而類就是完成residual 結(jié)構(gòu)的構(gòu)建。同樣Bottlenecttorch.nn.Module init forward 方法。從forward 就是3BN后的outr

13、esidual 就是element-wiseaddclass Bottleneck(nn.Module): = 4def init (self, inplanes, planes, stride=1, downssuper(Bottleneck, self). init ()self.bn1=padding=1, bias=False)self.bn2=self.bn3=nn.BatchNorm2d(planes*self.relu=le=self.stride=forward(self,residual=self.relu=le=self.stride=forward(self,residu

14、al=if leis =+=returnBasicBlockBottleneck 類類似,前者主要是用來(lái)構(gòu)建ResNet18ResNet34 網(wǎng)絡(luò),因?yàn)檫@兩個(gè)網(wǎng)絡(luò)的residualBottleneck 類中的BasicBlockBottleneck 類類似,前者主要是用來(lái)構(gòu)建ResNet18ResNet34 網(wǎng)絡(luò),因?yàn)檫@兩個(gè)網(wǎng)絡(luò)的residualBottleneck 類中的bottleneckkernel_size=3conv3x3defconv3x3(in_planes,out_planes,stride=1): 3x3 convolution with paddingreturn nn.C

15、onv2d(in_planes,out_planes,kernel_size=3,padding=1,class=def init (self,inplanes,planes,stride=1,super(BasicBlock,self). init self.conv1=conv3x3(inplanes,class=def init (self,inplanes,planes,stride=1,super(BasicBlock,self). init self.conv1=conv3x3(inplanes,planes, self.bn1 = nn.BatchNorm2d(planes)se

16、lf.relu=self.bn2= =conv3x3(planes,le = downsself.stride=defforward(self,residual=if leis not residual=out+=out=return if m就是通過(guò)_zoo.py 中的load_url 函數(shù)根據(jù)_urls預(yù)訓(xùn)練模型的.pyload_url 函數(shù)源碼如下。首先_dir沒(méi)有指定的話就會(huì)保存在項(xiàng)目的.torchif m就是通過(guò)_zoo.py 中的load_url 函數(shù)根據(jù)_urls預(yù)訓(xùn)練模型的.pyload_url 函數(shù)源碼如下。首先_dir沒(méi)有指定的話就會(huì)保存在項(xiàng)目的.torchcached_f

17、ile模型的路徑加上模型名稱。接下來(lái)的 ifnotos.path.exists(cached_file,_download_url_to_file(urlcached_filehash_prefixprogress=progress行的,不再細(xì)講。重點(diǎn)在于模型導(dǎo)入是通過(guò)torch.load,_download_url_to_file(urlcached_filehash_prefixprogress=progress行的,不再細(xì)講。重點(diǎn)在于模型導(dǎo)入是通過(guò)torch.loaddef load_url(url, m_dir=None,map_location=None,progress=True)

18、: rLoads the Torch serialized objecthe given URL.Iftheobjectisalreadypresentin_dir,itsdeserializedreturned.ThefilenamepartoftheURLshouldfollowthenamingfilename-.ext where is theeight or more digitsoftheSHA256hashofthecontentsofthefile. Thehashisusedto ensure unique names and to verify the contents of the file

溫馨提示

  • 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)論