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.

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.