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

pytorch 輸出中間層特征的實(shí)例

 更新時(shí)間:2019年08月17日 17:33:39   作者:LEILEI18A  
今天小編就為大家分享一篇pytorch 輸出中間層特征的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

pytorch 輸出中間層特征:

tensorflow輸出中間特征,2種方式:

1. 保存全部模型(包括結(jié)構(gòu))時(shí),需要之前先add_to_collection 或者 用slim模塊下的end_points

2. 只保存模型參數(shù)時(shí),可以讀取網(wǎng)絡(luò)結(jié)構(gòu),然后按照對(duì)應(yīng)的中間層輸出即可。

but:Pytorch 論壇給出的答案并不好用,無論是hooks,還是重建網(wǎng)絡(luò)并去掉某些層,這些方法都不好用(在我看來)。

我們可以在創(chuàng)建網(wǎng)絡(luò)class時(shí),在forward時(shí)加入一個(gè)dict 或者 list,dict是將中間層名字與中間層輸出分別作為key:value,然后作為第二個(gè)值返回。前提是:運(yùn)行創(chuàng)建自己的網(wǎng)絡(luò)(無論fine-tune),只保存網(wǎng)絡(luò)參數(shù)。

個(gè)人理解:雖然每次運(yùn)行都返回2個(gè)值,但是運(yùn)行效率基本沒有變化。

附上代碼例子:

import torch
import torchvision
import numpy as np
from torch import nn
from torch.nn import init
from torch.autograd import Variable
from torch.utils import data

EPOCH=20
BATCH_SIZE=64
LR=1e-2

train_data=torchvision.datasets.MNIST(root='./mnist',train=True,
                   transform=torchvision.transforms.ToTensor(),download=False)
train_loader=data.DataLoader(train_data,batch_size=BATCH_SIZE,shuffle=True)

test_data=torchvision.datasets.MNIST(root='./mnist',train=False)

test_x=Variable(torch.unsqueeze(test_data.test_data,dim=1).type(torch.FloatTensor)).cuda()/255
test_y=test_data.test_labels.cuda()

class CNN(nn.Module):
  def __init__(self):
    super().__init__()
    self.conv1=nn.Sequential(
        nn.Conv2d(in_channels=1,out_channels=16,kernel_size=4,stride=1,padding=2),
        nn.ReLU(),
        nn.MaxPool2d(kernel_size=2,stride=2))
    self.conv2=nn.Sequential(nn.Conv2d(16,32,4,1,2),nn.ReLU(),nn.MaxPool2d(2,2))
    self.out=nn.Linear(32*7*7,10)
    
  def forward(self,x):
    per_out=[] ############修改處##############
    x=self.conv1(x)
    per_out.append(x) # conv1
    x=self.conv2(x)
    per_out.append(x) # conv2
    x=x.view(x.size(0),-1)
    output=self.out(x)
    return output,per_out
  
cnn=CNN().cuda() # or cnn.cuda()

optimizer=torch.optim.Adam(cnn.parameters(),lr=LR)
loss_func=nn.CrossEntropyLoss().cuda()############################

for epoch in range(EPOCH):
  for step,(x,y) in enumerate(train_loader):
    b_x=Variable(x).cuda()# if channel==1 auto add c=1
    b_y=Variable(y).cuda()
#    print(b_x.data.shape)
    optimizer.zero_grad()
    output=cnn(b_x)[0] ##原先只需要cnn(b_x) 但是現(xiàn)在需要用到第一個(gè)返回值##
    loss=loss_func(output,b_y)# Variable need to get .data
    loss.backward()
    optimizer.step()
    
    if step%50==0:
      test_output=cnn(test_x)[0]
      pred_y=torch.max(test_output,1)[1].cuda().data.squeeze()
      '''
      why data ,because Variable .data to Tensor;and cuda() not to numpy() ,must to cpu and to numpy 
      and .float compute decimal
      '''
      accuracy=torch.sum(pred_y==test_y).data.float()/test_y.size(0)
      print('EPOCH: ',epoch,'| train_loss:%.4f'%loss.data[0],'| test accuracy:%.2f'%accuracy)
    #                       loss.data.cpu().numpy().item() get one value

  torch.save(cnn.state_dict(),'./model/model.pth')

##輸出中間層特征,根據(jù)索引調(diào)用##

conv1: conv1=cnn(b_x)[1][0]

conv2: conv2=cnn(b_x)[1][1]

##########################

hook使用:

res=torchvision.models.resnet18()

def get_features_hook(self, input, output):# self 代表類模塊本身
  print(output.data.cpu().numpy().shape)

handle=res.layer2.register_forward_hook(get_features_hook)

a=torch.ones([1,3,224,224])

b=res(a) 直接打印出 layer2的輸出形狀,但是不好用。因?yàn)椋瑢?shí)際中,我們需要return,而hook明確指出 不可以return 只能print。

所以,不建議使用hook。

以上這篇pytorch 輸出中間層特征的實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python3顯式變量類型typing的實(shí)現(xiàn)

    python3顯式變量類型typing的實(shí)現(xiàn)

    這篇文章主要介紹了python3顯式變量類型typing的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Python中Array特性與應(yīng)用實(shí)例深入探究

    Python中Array特性與應(yīng)用實(shí)例深入探究

    這篇文章主要為大家介紹了Python中Array特性與應(yīng)用實(shí)例深入探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Python實(shí)現(xiàn)Wordcloud生成詞云圖的示例

    Python實(shí)現(xiàn)Wordcloud生成詞云圖的示例

    這篇文章主要介紹了Python實(shí)現(xiàn)Wordcloud生成詞云圖的示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 快速了解python leveldb

    快速了解python leveldb

    這篇文章主要介紹了快速了解python leveldb,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • TensorFlow隱藏操作探索(張量操作和定制模型算法)

    TensorFlow隱藏操作探索(張量操作和定制模型算法)

    這篇文章主要為大家介紹了TensorFlow隱藏操作探索(張量操作和定制模型算法),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Python二維碼生成庫qrcode安裝和使用示例

    Python二維碼生成庫qrcode安裝和使用示例

    這篇文章主要介紹了Python二維碼生成庫qrcode安裝和使用示例,本文講解了qrcode的安裝、生成二維碼、生成帶圖標(biāo)的二維碼等內(nèi)容,需要的朋友可以參考下
    2014-12-12
  • 一文秒懂Python中的字符串

    一文秒懂Python中的字符串

    這篇文章主要介紹了一文秒懂Python中的字符串,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • python寫完程序怎么運(yùn)行的兩種方式

    python寫完程序怎么運(yùn)行的兩種方式

    這篇文章主要介紹了Python的兩種運(yùn)行方式,分別是命令行和交互式命令行,并詳細(xì)講解了如何在命令行和交互式命令行中運(yùn)行Python代碼,需要的朋友可以參考下
    2025-03-03
  • 一文解密Python的弱引用

    一文解密Python的弱引用

    弱引用在很多語言中都存在,最常用來解決循環(huán)引用問題,本文就來和大家一起探索一下python中的弱引用,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-09-09
  • Python通過Selenium獲取Web頁面信息的全指南

    Python通過Selenium獲取Web頁面信息的全指南

    Selenium?是一個(gè)功能強(qiáng)大的自動(dòng)化測(cè)試工具,但它也可以用于?web?頁面信息的抓取和分析,下面小編就來和大家詳細(xì)介紹一下具體是實(shí)現(xiàn)方法吧
    2025-04-04

最新評(píng)論

新平| 潼南县| 镶黄旗| 娱乐| 开封市| 尖扎县| 开平市| 潼南县| 清原| 巩义市| 曲松县| 普兰店市| 桃江县| 句容市| 嘉兴市| 锡林浩特市| 灵丘县| 岢岚县| 光泽县| 郎溪县| 嘉善县| 泾源县| 浪卡子县| 德江县| 丰城市| 乐陵市| 晋城| 临夏县| 濮阳县| 大同市| 吴川市| 山阴县| 辉县市| 新宾| 郯城县| 威信县| 宜春市| 那坡县| 金昌市| 如东县| 炉霍县|