Pytorch-fogyókúra a mesternél · foolwoodpytorch-fogyókúra · GitHub

A GitHub több mint 50 millió fejlesztőnek ad otthont, amelyek együttesen működnek együtt kódok befogadásában és felülvizsgálatában, projektek kezelésében és szoftverek építésében.

mesternél

A GitHub az, ahol a világ szoftvereket épít

Fejlesztők és vállalatok milliói építik, szállítják és tartják karban szoftverüket a GitHubon - a világ legnagyobb és legfejlettebb fejlesztői platformján.

pytorch-fogyókúra/prune.py /

Nem található definíció ebben a fájlban.

  • Ugrás a T fájlra
  • Menj az L sorra
  • Menj az R definícióhoz
  • Útvonal másolása
import os
import argparse
import fáklya
import fáklya. nn mint nn
fáklyától. autograd import változó
torchvision import adatkészletekből, transzformációkból
vgg importból vgg
importálja a számot np-ként
# A metszés beállításai
parser = argparse. ArgumentParser (leírás = 'PyTorch Slimming CIFAR prune')
elemző . add_argument ('--dataset', type = str, default = 'cifar10',
help = 'edzés adatkészlet (alapértelmezett: cifar10)')
elemző . add_argument ('--test-batch-size', type = int, default = 1000, metavar = 'N',
help = 'bemeneti kötegméret a teszteléshez (alapértelmezett: 1000)')
elemző . add_argument ('--no-cuda', action = 'store_true', alapértelmezett = Hamis,
help = 'letiltja a CUDA képzést')
elemző . add_argument ('--percent', type = float, alapértelmezett = 0.5,
help = 'skála ritka arány (alapértelmezett: 0.5)')
elemző . add_argument ('--model', alapértelmezett = '', type = str, metavar = 'PATH',
help = 'elérési út a nyers képzett modellhez (alapértelmezett: nincs)')
elemző . add_argument ('--save', alapértelmezett = '', type = str, metavar = 'PATH',
help = 'út az aszalt szilva modell mentéséhez (alapértelmezett: nincs)')
args = elemző. parse_args ()
érvel. cuda = nem érvel. no_cuda és fáklya. cuda. elérhető ()
model = vgg ()
ha érvel. cuda:
modell. cuda ()
ha érvel. modell:
ha os. pálya . isfile (arg. modell):
nyomtatás ("=> ellenőrzőpont betöltése '<>'". formátum (érvelési modell))
ellenőrzőpont = fáklya. terhelés (arg. modell)
érvel. start_epoch = ellenőrzőpont ['korszak']
best_prec1 = ellenőrzőpont ['best_prec1']
modell. load_state_dict (ellenőrzőpont ['state_dict'])
print ("=> betöltött ellenőrzőpont '<>' (epoch <>) 1. prek .:"
. formátum (arg. modell, ellenőrző pont ['korszak'], legjobb_prec1))
más:
nyomtatás ("=> a '<>'" formátumban nem található ellenőrző pont (arg. folytatás))
nyomtatás (modell)
összesen = 0
m-re modellben. modulok ():
ha isinstance (m, nn. BatchNorm2d):
összesen + = m. súly . adatok. alak [0]
bn = fáklya. nullák (összesen)
index = 0
m-re modellben. modulok ():
ha isinstance (m, nn. BatchNorm2d):
méret = m. súly . adatok. alak [0]
bn [index:( index + méret)] = m. súly . adatok. abs (). klón ()
index + = méret
y, i = fáklya. rendezés (milliárd)
thre_index = int (összesen * arg. százalék)
thre = y [thre_index]
metszett = 0
cfg = []
cfg_mask = []
k, m esetén felsoroljuk (modell. modulok ()):
ha isinstance (m, nn. BatchNorm2d):
súly_másolat = m. súly . adatok. klón ()
maszk = súly_másolat. abs (). gt (három). úszó (). cuda ()
metszett = metszett + maszk. alak [0] - fáklya. összeg (maszk)
m. súly . adatok. mul_ (maszk)
m. Elfogultság . adatok. mul_ (maszk)
vö. függelék (int (fáklya. összeg (maszk)))
cfg_mask. függelék (maszk. klón ())
print ('réteg index: \ t teljes csatorna: \ t fennmaradó csatorna:' .
formátum (k, maszk. alak [0], int (fáklya. összeg (maszk))))
elif izinstance (m, nn. MaxPool2d):
vö. függelék ('M')
metszett_arány = metszett/összesen
nyomtatás ('Sikeres előfeldolgozás!')
# egyszerű tesztmodell a metszés előfeldolgozása után (egyszerű BN skálák nullára állítása)
def teszt ():
kwargs = < 'num_workers': 1, 'pin_memory': True >ha érvel. cuda más <>
teszt_töltő = fáklya. utils. adatok. DataLoader (
adatkészletek. CIFAR10 ('./data', vonat = Hamis, transzformáció = transzformáció. Írja ([
átalakul. ToTensor (),
átalakul. Normalizálás ((0,5, 0,5, 0,5), (0,5, 0,5, 0,5))])),
kötegelt_méret = érvel. test_batch_size, shuffle = True, ** kwargs)
modell. eval ()
helyes = 0
Adatok esetén célozzon a test_loader programban:
ha érvel. cuda:
adatok, cél = adatok. cuda (), cél. cuda ()
adatok, cél = változó (adatok, volatilis = igaz), változó (cél)
output = modell (adatok)
pred = kimenet. adatok. max (1, keepdim = True) [1] # megkapja a maximális log-valószínűség indexét
helyes + = pred. eq (cél. adatok. view_as (pred)). CPU (). összeg ()
print ('\ n Tesztkészlet: Pontosság: <>/<> (%) \ n'. formátum (
helyes, len (test_loader. adatkészlet), 100. * helyes/len (test_loader. adatkészlet)))
return return/float (len (test_loader. adatkészlet))
teszt ()
# Készítsen valódi metszést
nyomtatás (cfg)
newmodel = vgg (cfg = cfg)
új modell . cuda ()
layer_id_in_cfg = 0
start_mask = fáklya. egyek (3)
end_mask = cfg_mask [layer_id_in_cfg]
[m0, m1] esetén zip-ben (modell. modulok (), újmodell. modulok ()):
ha isinstance (m0, nn. BatchNorm2d):
idx1 = np. nyomja (np. argwhere (np. asarray (end_mask. cpu (). numpy ())))
m1. súly . adatok = m0. súly . adatok [idx1]. klón ()
m1. Elfogultság . adatok = m0. Elfogultság . adatok [idx1]. klón ()
m1. futás_érték = m0. running_mean [idx1]. klón ()
m1. futás_var = m0. running_var [idx1]. klón ()
layer_id_in_cfg + = 1
start_mask = end_mask. klón ()
ha a layer_id_in_cfg len (cfg_mask): # nem változik a Final FC-ben
end_mask = cfg_mask [layer_id_in_cfg]
elif izinstance (m0, nn. Conv2d):
idx0 = np. összenyomni (np. argwhere (np. asarray (start_mask. cpu (). numpy ())))
idx1 = np. nyomja (np. argwhere (np. asarray (end_mask. cpu (). numpy ())))
print ('Formában: Out shape:'. formátum (idx0. alak [0], idx1. alak [0]))
w = m0. súly . adatok [:, idx0,:,:]. klón ()
w = w [idx1,:,:,:]. klón ()
m1. súly . adatok = w. klón ()
# m1.bias.data = m0.bias.data [idx1] .clone ()
elif izinstance (m0, nn. Lineáris):
idx0 = np. összenyomni (np. argwhere (np. asarray (start_mask. cpu (). numpy ())))
m1. súly . adatok = m0. súly . adatok [:, idx0]. klón ()
fáklya. megment (< 'cfg': cfg, 'state_dict': newmodel . state_dict ()>, érvel. megment )
nyomtatás (newmodel)
model = newmodel
teszt ()

  • Sorok másolása
  • Másolja a permalinket
  • Tekintse meg a hibát
  • Hivatkozás az új számban

Jelenleg nem hajthatja végre ezt a műveletet.

Egy másik füllel vagy ablakkal jelentkezett be. Töltse be újra a munkamenet frissítéséhez. Kijelentkezett egy másik fülön vagy ablakban. Töltse be újra a munkamenet frissítéséhez.