7

Come calcolare il numero di parametri in un modello, ad es. LENET per mnist, o ConvNet per il modello di immagini ecc. Esiste una funzione specifica in caffe che restituisce o salva il numero di parametri in un modello. salutinumero di parametri nei modelli Caffe LENET o Imagenet

+0

Guardate net.params dopo aver caricato la CNN in rete variabile. Contiene i parametri (pesi e bias) per ogni strato. – pir

+1

conosci il comando utilizzando il terminale per caffe. Comunque ho trovato la farmula. Ad esempio, filtri x canali x Kernel_Width x Kernel_Height + Bias. Questo ti darà parametri su un livello. allo stesso modo per gli altri. Tuttavia avevo bisogno di qualsiasi comando in caffe usando il terminale, ad es. in MATLAB abbiamo numel (net.params) che puoi dire. – khan

+1

C'è una [richiesta di funzionalità] aperta (https://github.com/BVLC/caffe/issues/2507) al github di caffe per questa funzionalità. – Shai

risposta

1

Posso offrire un modo esplicito per farlo tramite l'interfaccia Matlab (assicurarsi che il matcaffe sia installato per primo). Fondamentalmente, si estrae un set di parametri da ogni livello di rete e li si contano. In Matlab:

% load the network 
net_model = <path to your *deploy.prototxt file> 
net_weights = <path to your *.caffemodel file> 
phase = 'test'; 
test_net = caffe.Net(net_model, net_weights, phase); 

% get the list of layers 
layers_list = test_net.layer_names; 
% for those layers which have parameters, count them 
counter = 0; 
for j = 1:length(layers_list), 
    if ~isempty(test_net.layers(layers_list{j}).params) 
    feat = test_net.layers(layers_list{j}).params(1).get_data(); 
    counter = counter + numel(feat) 
    end 
end 

Alla fine, 'contatore' contiene il numero di parametri.

2

Ecco un frammento di pitone per calcolare il numero di parametri in un modello Caffe:

import caffe 
caffe.set_mode_cpu() 
import numpy as np 
from numpy import prod, sum 
from pprint import pprint 

def print_net_parameters (deploy_file): 
    print "Net: " + deploy_file 
    net = caffe.Net(deploy_file, caffe.TEST) 
    print "Layer-wise parameters: " 
    pprint([(k, v[0].data.shape) for k, v in net.params.items()]) 
    print "Total number of parameters: " + str(sum([prod(v[0].data.shape) for k, v in net.params.items()])) 

deploy_file = "/home/ubuntu/deploy.prototxt" 
print_net_parameters(deploy_file) 

# Sample output: 
# Net: /home/ubuntu/deploy.prototxt 
# Layer-wise parameters: 
#[('conv1', (96, 3, 11, 11)), 
# ('conv2', (256, 48, 5, 5)), 
# ('conv3', (384, 256, 3, 3)), 
# ('conv4', (384, 192, 3, 3)), 
# ('conv5', (256, 192, 3, 3)), 
# ('fc6', (4096, 9216)), 
# ('fc7', (4096, 4096)), 
# ('fc8', (819, 4096))] 
# Total number of parameters: 60213280 

https://gist.github.com/kaushikpavani/a6a32bd87fdfe5529f0e908ed743f779