wake-up-neo.com

wie man die FLOPs eines Netzes in CNN berechnet

Ich möchte ein konvolutives neuronales Netzwerk entwerfen, das die GPU-Ressource nicht mehr als Alexnet belegt. Ich möchte FLOPs verwenden, um es zu messen, aber ich weiß nicht, wie man es berechnet.

7
StalkerMuse

Für das Online-Tool siehe http://dgschwend.github.io/netscope/#/editor . Für alexnet siehe http://dgschwend.github.io/netscope/#/preset/alexnet . Dies unterstützt die meisten bekannten Schichten. Für benutzerdefinierte Ebenen müssen Sie sich selbst berechnen.

7
lnman

Für zukünftige Besucher können Sie das folgende Beispiel ausprobieren, wenn Sie Keras und TensorFlow als Backend verwenden. Es berechnet die FLOPs für das 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

Wenn Sie Keras verwenden, können Sie den Patch in dieser Pull-Anforderung verwenden: https://github.com/fchollet/keras/pull/6203

Dann rufen Sie einfach print_summary () auf und Sie sehen sowohl die Flops pro Ebene als auch die Summe.

Selbst wenn Sie Keras nicht verwenden, kann es sich lohnen, Ihre Netze in Keras neu zu erstellen, damit Sie die Flops zählen können.

0
Alex I