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
7
A
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
Guardate net.params dopo aver caricato la CNN in rete variabile. Contiene i parametri (pesi e bias) per ogni strato. – pir
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
C'è una [richiesta di funzionalità] aperta (https://github.com/BVLC/caffe/issues/2507) al github di caffe per questa funzionalità. – Shai