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

pytorch 中的重要模塊化接口nn.Module的使用

 更新時(shí)間:2020年04月02日 14:31:14   作者:今夜無風(fēng)  
這篇文章主要介紹了pytorch 中的重要模塊化接口nn.Module的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

torch.nn 是專門為神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)的模塊化接口,nn構(gòu)建于autgrad之上,可以用來定義和運(yùn)行神經(jīng)網(wǎng)絡(luò)
nn.Module 是nn中重要的類,包含網(wǎng)絡(luò)各層的定義,以及forward方法

查看源碼

初始化部分:

def __init__(self):
  self._backend = thnn_backend
  self._parameters = OrderedDict()
  self._buffers = OrderedDict()
  self._backward_hooks = OrderedDict()
  self._forward_hooks = OrderedDict()
  self._forward_pre_hooks = OrderedDict()
  self._state_dict_hooks = OrderedDict()
  self._load_state_dict_pre_hooks = OrderedDict()
  self._modules = OrderedDict()
  self.training = True

屬性解釋:

  • _parameters:字典,保存用戶直接設(shè)置的 Parameter
  • _modules:子 module,即子類構(gòu)造函數(shù)中的內(nèi)容
  • _buffers:緩存
  • _backward_hooks與_forward_hooks:鉤子技術(shù),用來提取中間變量
  • training:判斷值來決定前向傳播策略

方法定義:

def forward(self, *input):
 raise NotImplementedError

沒有實(shí)際內(nèi)容,用于被子類的 forward() 方法覆蓋

且 forward 方法在 __call__ 方法中被調(diào)用:

def __call__(self, *input, **kwargs):
 for hook in self._forward_pre_hooks.values():
    hook(self, input)
  if torch._C._get_tracing_state():
    result = self._slow_forward(*input, **kwargs)
  else:
    result = self.forward(*input, **kwargs)
  ...
  ...

對(duì)于自己定義的網(wǎng)絡(luò),需要注意以下幾點(diǎn):

1)需要繼承nn.Module類,并實(shí)現(xiàn)forward方法,只要在nn.Module的子類中定義forward方法,backward函數(shù)就會(huì)被自動(dòng)實(shí)現(xiàn)(利用autograd機(jī)制)
2)一般把網(wǎng)絡(luò)中可學(xué)習(xí)參數(shù)的層放在構(gòu)造函數(shù)中__init__(),沒有可學(xué)習(xí)參數(shù)的層如Relu層可以放在構(gòu)造函數(shù)中,也可以不放在構(gòu)造函數(shù)中(在forward函數(shù)中使用nn.Functional)
3)在forward中可以使用任何Variable支持的函數(shù),在整個(gè)pytorch構(gòu)建的圖中,是Variable在流動(dòng),也可以使用for,print,log等
4)基于nn.Module構(gòu)建的模型中,只支持mini-batch的Variable的輸入方式,如,N*C*H*W

代碼示例:

class LeNet(nn.Module):
  def __init__(self):
    # nn.Module的子類函數(shù)必須在構(gòu)造函數(shù)中執(zhí)行父類的構(gòu)造函數(shù)
    super(LeNet, self).__init__() # 等價(jià)與nn.Module.__init__()

    # nn.Conv2d返回的是一個(gè)Conv2d class的一個(gè)對(duì)象,該類中包含forward函數(shù)的實(shí)現(xiàn)
    # 當(dāng)調(diào)用self.conv1(input)的時(shí)候,就會(huì)調(diào)用該類的forward函數(shù)
    self.conv1 = nn.Conv2d(1, 6, (5, 5)) # output (N, C_{out}, H_{out}, W_{out})`
    self.conv2 = nn.Conv2d(6, 16, (5, 5))
    self.fc1 = nn.Linear(256, 120)
    self.fc2 = nn.Linear(120, 84)
    self.fc3 = nn.Linear(84, 10)

  def forward(self, x):
    # F.max_pool2d的返回值是一個(gè)Variable, input:(10,1,28,28) ouput:(10, 6, 12, 12)
    x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
    # input:(10, 6, 12, 12)  output:(10,6,4,4)
    x = F.max_pool2d(F.relu(self.conv2(x)), (2, 2))
    # 固定樣本個(gè)數(shù),將其他維度的數(shù)據(jù)平鋪,無論你是幾通道,最終都會(huì)變成參數(shù), output:(10, 256)
    x = x.view(x.size()[0], -1)
    # 全連接
    x = F.relu(self.fc1(x))
    x = F.relu(self.fc2(x))
    x = F.relu(self.fc3(x))

    # 返回值也是一個(gè)Variable對(duì)象
    return x


def output_name_and_params(net):
  for name, parameters in net.named_parameters():
    print('name: {}, param: {}'.format(name, parameters))


if __name__ == '__main__':
  net = LeNet()
  print('net: {}'.format(net))
  params = net.parameters() # generator object
  print('params: {}'.format(params))
  output_name_and_params(net)

  input_image = torch.FloatTensor(10, 1, 28, 28)

  # 和tensorflow不一樣,pytorch中模型的輸入是一個(gè)Variable,而且是Variable在圖中流動(dòng),不是Tensor。
  # 這可以從forward中每一步的執(zhí)行結(jié)果可以看出
  input_image = Variable(input_image)

  output = net(input_image)
  print('output: {}'.format(output))
  print('output.size: {}'.format(output.size()))

到此這篇關(guān)于pytorch 中的重要模塊化接口nn.Module的使用的文章就介紹到這了,更多相關(guān)pytorch nn.Module內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • postman模擬訪問具有Session的post請(qǐng)求方法

    postman模擬訪問具有Session的post請(qǐng)求方法

    今天小編就為大家分享一篇postman模擬訪問具有Session的post請(qǐng)求方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • python數(shù)據(jù)分析之DataFrame內(nèi)存優(yōu)化

    python數(shù)據(jù)分析之DataFrame內(nèi)存優(yōu)化

    pandas處理幾百兆的dataframe是沒有問題的,但是我們?cè)谔幚韼讉€(gè)G甚至更大的數(shù)據(jù)時(shí),就會(huì)特別占用內(nèi)存,對(duì)內(nèi)存小的用戶特別不好,所以對(duì)數(shù)據(jù)進(jìn)行壓縮是很有必要的,本文就介紹了python DataFrame內(nèi)存優(yōu)化,感興趣的可以了解一下
    2021-07-07
  • 初探TensorFLow從文件讀取圖片的四種方式

    初探TensorFLow從文件讀取圖片的四種方式

    本篇文章主要介紹了初探TensorFLow從文件讀取圖片的四種方式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02
  • Django配置跨域并開發(fā)測(cè)試接口

    Django配置跨域并開發(fā)測(cè)試接口

    這篇文章主要介紹了Django配置跨域并開發(fā)測(cè)試接口,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 如何用Python和JS實(shí)現(xiàn)的Web SSH工具

    如何用Python和JS實(shí)現(xiàn)的Web SSH工具

    這篇文章主要介紹了如何用Python和JS實(shí)現(xiàn)的Web SSH工具,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • python 下 CMake 安裝配置 OPENCV 4.1.1的方法

    python 下 CMake 安裝配置 OPENCV 4.1.1的方法

    這篇文章主要介紹了python 下 CMake 安裝配置 OPENCV 4.1.1的方法,文中給大家提到了CMake 安裝配置 OPENCV 4.1.1 解決各種問題,需要的朋友可以參考下
    2019-09-09
  • python實(shí)現(xiàn)比較類的兩個(gè)instance(對(duì)象)是否相等的方法分析

    python實(shí)現(xiàn)比較類的兩個(gè)instance(對(duì)象)是否相等的方法分析

    這篇文章主要介紹了python實(shí)現(xiàn)比較類的兩個(gè)instance(對(duì)象)是否相等的方法,結(jié)合實(shí)例形式分析了Python判斷類的實(shí)例是否相等的判斷操作實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-06-06
  • python中PIL安裝簡單教程

    python中PIL安裝簡單教程

    這篇文章主要為大家分享了python中PIL安裝簡單教程,感興趣的小伙伴們可以參考一下
    2016-04-04
  • 使用Python、TensorFlow和Keras來進(jìn)行垃圾分類的操作方法

    使用Python、TensorFlow和Keras來進(jìn)行垃圾分類的操作方法

    這篇文章主要介紹了如何使用Python、TensorFlow和Keras來進(jìn)行垃圾分類,這個(gè)模型在測(cè)試集上可以達(dá)到約80%的準(zhǔn)確率,可以作為一個(gè)基礎(chǔ)模型進(jìn)行后續(xù)的優(yōu)化,需要的朋友可以參考下
    2023-05-05
  • Python實(shí)現(xiàn)socket庫網(wǎng)絡(luò)通信套接字

    Python實(shí)現(xiàn)socket庫網(wǎng)絡(luò)通信套接字

    socket又叫套接字,實(shí)現(xiàn)網(wǎng)絡(luò)通信的兩端就是套接字。分為服務(wù)器對(duì)應(yīng)的套接字和客戶端對(duì)應(yīng)的套接字,本文給大家介紹Python實(shí)現(xiàn)socket庫網(wǎng)絡(luò)通信套接字的相關(guān)知識(shí),包括套接字的基本概念,感興趣的朋友跟隨小編一起看看吧
    2021-06-06

最新評(píng)論