最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用pytorch搭建AlexNet操作(微調(diào)預(yù)訓(xùn)練模型及手動(dòng)搭建)

 更新時(shí)間:2020年01月18日 16:14:58   作者:sjtu_leexx  
今天小編就為大家分享一篇使用pytorch搭建AlexNet操作(微調(diào)預(yù)訓(xùn)練模型及手動(dòng)搭建),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧

本文介紹了如何在pytorch下搭建AlexNet,使用了兩種方法,一種是直接加載預(yù)訓(xùn)練模型,并根據(jù)自己的需要微調(diào)(將最后一層全連接層輸出由1000改為10),另一種是手動(dòng)搭建。

構(gòu)建模型類的時(shí)候需要繼承自torch.nn.Module類,要自己重寫__ \_\___init__ \_\___方法和正向傳遞時(shí)的forward方法,這里我自己的理解是,搭建網(wǎng)絡(luò)寫在__ \_\___init__ \_\___中,每次正向傳遞需要計(jì)算的部分寫在forward中,例如把矩陣壓平之類的。

加載預(yù)訓(xùn)練alexnet之后,可以print出來查看模型的結(jié)構(gòu)及信息:

model = models.alexnet(pretrained=True)
print(model)

分為兩個(gè)部分,features及classifier,后續(xù)搭建模型時(shí)可以也寫成這兩部分,并且從打印出來的模型信息中也可以看出每一層的引用方式,便于修改,例如model.classifier[1]指的就是Linear(in_features=9216, out_features=4096, bias=True)這層。

下面放出完整的搭建代碼:

import torch.nn as nn
from torchvision import models

class BuildAlexNet(nn.Module):
  def __init__(self, model_type, n_output):
    super(BuildAlexNet, self).__init__()
    self.model_type = model_type
    if model_type == 'pre':
      model = models.alexnet(pretrained=True)
      self.features = model.features
      fc1 = nn.Linear(9216, 4096)
      fc1.bias = model.classifier[1].bias
      fc1.weight = model.classifier[1].weight
      
      fc2 = nn.Linear(4096, 4096)
      fc2.bias = model.classifier[4].bias
      fc2.weight = model.classifier[4].weight
      
      self.classifier = nn.Sequential(
          nn.Dropout(),
          fc1,
          nn.ReLU(inplace=True),
          nn.Dropout(),
          fc2,
          nn.ReLU(inplace=True),
          nn.Linear(4096, n_output)) 
      #或者直接修改為
#      model.classifier[6]==nn.Linear(4096,n_output)
#      self.classifier = model.classifier
    if model_type == 'new':
      self.features = nn.Sequential(
          nn.Conv2d(3, 64, 11, 4, 2),
          nn.ReLU(inplace = True),
          nn.MaxPool2d(3, 2, 0),
          nn.Conv2d(64, 192, 5, 1, 2),
          nn.ReLU(inplace=True),
          nn.MaxPool2d(3, 2, 0),
          nn.Conv2d(192, 384, 3, 1, 1),
          nn.ReLU(inplace = True),
          nn.Conv2d(384, 256, 3, 1, 1),
          nn.ReLU(inplace=True),
          nn.MaxPool2d(3, 2, 0))
      self.classifier = nn.Sequential(
          nn.Dropout(),
          nn.Linear(9216, 4096),
          nn.ReLU(inplace=True),
          nn.Dropout(),
          nn.Linear(4096, 4096),
          nn.ReLU(inplace=True),
          nn.Linear(4096, n_output))
      
  def forward(self, x):
    x = self.features(x)
    x = x.view(x.size(0), -1)
    out = self.classifier(x)
    return out

微調(diào)預(yù)訓(xùn)練模型的思路為:直接保留原模型的features部分,重寫classifier部分。在classifier部分中,我們實(shí)際需要修改的只有最后一層全連接層,之前的兩個(gè)全連接層不需要修改,所以重寫的時(shí)候需要把這兩層的預(yù)訓(xùn)練權(quán)重和偏移保留下來,也可以像注釋掉的兩行代碼里那樣直接引用最后一層全連接層進(jìn)行修改。

網(wǎng)絡(luò)搭好之后可以小小的測試一下以檢驗(yàn)維度是否正確。

import numpy as np
from torch.autograd import Variable
import torch

if __name__ == '__main__':
  model_type = 'pre'
  n_output = 10
  alexnet = BuildAlexNet(model_type, n_output)
  print(alexnet)
  
  x = np.random.rand(1,3,224,224)
  x = x.astype(np.float32)
  x_ts = torch.from_numpy(x)
  x_in = Variable(x_ts)
  y = alexnet(x_in)

這里如果不加“x = x.astype(np.float32)”的話會報(bào)一個(gè)類型錯(cuò)誤,感覺有點(diǎn)奇怪。

輸出y.data.numpy()可得10維輸出,表明網(wǎng)絡(luò)搭建正確。

以上這篇使用pytorch搭建AlexNet操作(微調(diào)預(yù)訓(xùn)練模型及手動(dòng)搭建)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 深入理解python中的ThreadLocal

    深入理解python中的ThreadLocal

    本文主要介紹了深入理解python中的ThreadLocal,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 如何使用Django默認(rèn)的Auth權(quán)限管理系統(tǒng)

    如何使用Django默認(rèn)的Auth權(quán)限管理系統(tǒng)

    本文主要介紹了如何使用Django默認(rèn)的Auth權(quán)限管理系統(tǒng),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python中的文件和目錄操作實(shí)現(xiàn)代碼

    Python中的文件和目錄操作實(shí)現(xiàn)代碼

    對于文件和目錄的處理,雖然可以通過操作系統(tǒng)命令來完成,但是Python語言為了便于開發(fā)人員以編程的方式處理相關(guān)工作,提供了許多處理文件和目錄的內(nèi)置函數(shù)。重要的是,這些函數(shù)無論是在Unix、Windows還是Macintosh平臺上,它們的使用方式是完全一致的。
    2011-03-03
  • Pycharm保存不能自動(dòng)同步到遠(yuǎn)程服務(wù)器的解決方法

    Pycharm保存不能自動(dòng)同步到遠(yuǎn)程服務(wù)器的解決方法

    今天小編就為大家分享一篇Pycharm保存不能自動(dòng)同步到遠(yuǎn)程服務(wù)器的解決方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • pytorch動(dòng)態(tài)神經(jīng)網(wǎng)絡(luò)(擬合)實(shí)現(xiàn)

    pytorch動(dòng)態(tài)神經(jīng)網(wǎng)絡(luò)(擬合)實(shí)現(xiàn)

    這篇文章主要介紹了pytorch動(dòng)態(tài)神經(jīng)網(wǎng)絡(luò)(擬合)實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Python中用startswith()函數(shù)判斷字符串開頭的教程

    Python中用startswith()函數(shù)判斷字符串開頭的教程

    這篇文章主要介紹了Python中用startswith()函數(shù)判斷字符串開頭的教程,startswith()函數(shù)的使用是Python學(xué)習(xí)中的基礎(chǔ)知識,本文列舉了一些不同情況下的使用結(jié)果,需要的朋友可以參考下
    2015-04-04
  • Python使用googletrans報(bào)錯(cuò)的解決方法

    Python使用googletrans報(bào)錯(cuò)的解決方法

    這篇文章主要給大家介紹了關(guān)于Python使用googletrans報(bào)錯(cuò)的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • 33個(gè)Python爬蟲項(xiàng)目實(shí)戰(zhàn)(推薦)

    33個(gè)Python爬蟲項(xiàng)目實(shí)戰(zhàn)(推薦)

    這篇文章主要介紹了33個(gè)Python爬蟲項(xiàng)目實(shí)戰(zhàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-07-07
  • 對python實(shí)現(xiàn)二維函數(shù)高次擬合的示例詳解

    對python實(shí)現(xiàn)二維函數(shù)高次擬合的示例詳解

    今天小編就為大家分享一篇對python實(shí)現(xiàn)二維函數(shù)高次擬合的示例詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • pytest多線程與多設(shè)備并發(fā)appium

    pytest多線程與多設(shè)備并發(fā)appium

    這篇文章介紹了pytest多線程與多設(shè)備并發(fā)appium,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06

最新評論

莎车县| 黑河市| 城步| 绥中县| 利辛县| 朝阳县| 左权县| 元氏县| 广宗县| 女性| 沙湾县| 察哈| 和田市| 靖西县| 施秉县| 岳阳县| 新密市| 尚志市| 尤溪县| 孝感市| 呼玛县| 体育| 师宗县| 大邑县| 吉安县| 徐汇区| 陇川县| 永康市| 沙雅县| 莱芜市| 五常市| 谷城县| 页游| 越西县| 静乐县| 蒙山县| 昔阳县| 高青县| 原平市| 抚松县| 兴安县|