web-dev-qa-db-fra.com

comment calculer les FLOP d'un filet dans CNN

Je souhaite concevoir un réseau de neurones de convolution qui n'occupe pas plus de ressources GPU qu'Alexnet.Je souhaite utiliser des FLOP pour le mesurer, mais je ne sais pas comment le calculer.

7
StalkerMuse

Pour l’outil en ligne, voir http://dgschwend.github.io/netscope/#/editor . Pour alexnet voir http://dgschwend.github.io/netscope/#/preset/alexnet . Cela prend en charge la plupart des couches connues. Pour les calques personnalisés, vous devrez calculer vous-même.

7
lnman

Pour les futurs visiteurs, si vous utilisez Keras et TensorFlow en tant que backend, vous pouvez essayer l'exemple suivant. Il calcule les FLOP pour le MobileNet.

import tensorflow as tf
import keras.backend as K
from keras.applications.mobilenet import MobileNet

run_meta = tf.RunMetadata()
with tf.Session(graph=tf.Graph()) as sess:
    K.set_session(sess)
    net = MobileNet(alpha=.75, input_tensor=tf.placeholder('float32', shape=(1,32,32,3)))

    opts = tf.profiler.ProfileOptionBuilder.float_operation()    
    flops = tf.profiler.profile(sess.graph, run_meta=run_meta, cmd='op', options=opts)

    opts = tf.profiler.ProfileOptionBuilder.trainable_variables_parameter()    
    params = tf.profiler.profile(sess.graph, run_meta=run_meta, cmd='op', options=opts)

    print("{:,} --- {:,}".format(flops.total_float_ops, params.total_parameters))
3
Tobias Scheck

Si vous utilisez Keras, vous pouvez simplement utiliser le correctif dans cette demande d'extraction: https://github.com/fchollet/keras/pull/6203

Ensuite, appelez simplement print_summary () et vous verrez à la fois les flops par couche et le total.

Même si vous n'utilisez pas Keras, il peut être intéressant de recréer vos filets à Keras juste pour pouvoir compter les échecs.

0
Alex I