欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用pytorch搭建AlexNet操作(微調預訓練模型及手動搭建)

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

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

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

加載預訓練alexnet之后,可以print出來查看模型的結構及信息:

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

分為兩個部分,features及classifier,后續(xù)搭建模型時可以也寫成這兩部分,并且從打印出來的模型信息中也可以看出每一層的引用方式,便于修改,例如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

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

網絡搭好之后可以小小的測試一下以檢驗維度是否正確。

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)”的話會報一個類型錯誤,感覺有點奇怪。

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

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

相關文章

  • 使用pyshp包進行shapefile文件修改的例子

    使用pyshp包進行shapefile文件修改的例子

    今天小編就為大家分享一篇使用pyshp包進行shapefile文件修改的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 利用Python如何生成hash值示例詳解

    利用Python如何生成hash值示例詳解

    這篇文章主要給大家介紹了關于利用Python如何生成hash值的相關資料,并且給大家分享了利用Python一句話校驗軟件哈希值的方法,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。
    2017-12-12
  • Python 獲取 datax 執(zhí)行結果保存到數(shù)據庫的方法

    Python 獲取 datax 執(zhí)行結果保存到數(shù)據庫的方法

    今天小編就為大家分享一篇Python 獲取 datax 執(zhí)行結果保存到數(shù)據庫的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • 使用Python的pygame庫實現(xiàn)下雪效果的示例代碼

    使用Python的pygame庫實現(xiàn)下雪效果的示例代碼

    這篇文章給大家介紹了如何使用Python的pygame庫實現(xiàn)下雪的效果,文中通過代碼示例介紹的非常詳細,對大家的學習或工作有一定的的幫助,需要的朋友可以參考下
    2024-01-01
  • Python制作簡易版小工具之計算天數(shù)的實現(xiàn)思路

    Python制作簡易版小工具之計算天數(shù)的實現(xiàn)思路

    這篇文章主要介紹了Python制作簡易版小工具之計算天數(shù)的實現(xiàn)思路,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • Python Joblib庫使用方法案例總結

    Python Joblib庫使用方法案例總結

    Python Joblib庫是一個用于并行計算和數(shù)據預處理的工具庫。它可以幫助用戶快速處理大量數(shù)據,提高計算效率。其中,最常用的功能是并行計算,可以使用多個CPU核心同時處理任務,大大縮短計算時間。此外,Joblib還提供了一些數(shù)據預處理的功能,可以幫助用戶更好地處理數(shù)據
    2023-06-06
  • 利用python實現(xiàn)蝴蝶曲線

    利用python實現(xiàn)蝴蝶曲線

    這篇文章主要介紹了如何利用python實現(xiàn)蝴蝶曲線,自然界的很多現(xiàn)象都可以適當?shù)暮喕么鷶?shù)曲線和超越曲線來表達,下面我們就來利用去先畫出小蝴蝶,需要的小伙伴可以參考一下
    2022-03-03
  • pytorch中的上采樣以及各種反操作,求逆操作詳解

    pytorch中的上采樣以及各種反操作,求逆操作詳解

    今天小編就為大家分享一篇pytorch中的上采樣以及各種反操作,求逆操作詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python爬蟲獲取小區(qū)經緯度以及結構化地址

    python爬蟲獲取小區(qū)經緯度以及結構化地址

    這篇文章主要為大家詳細介紹了python爬蟲獲取小區(qū)經緯度,以及結構化的地址,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Python多進程模式實現(xiàn)多核CPU并行計算

    Python多進程模式實現(xiàn)多核CPU并行計算

    隨著計算機硬件的不斷發(fā)展,多核CPU已經成為普及的硬件設備,在本文中,我們將重點介紹在Python中如何利用多進程模式提高程序的執(zhí)行效率,感興趣的可以了解一下
    2023-05-05

最新評論