Frage: Ich konvertiere das grundlegende MNIST-Beispiel von Tensorflow in eine vollständig konvolutionelle Implementierung. Jetzt dauern 100 Iterationen etwa 20 mal länger als zuvor. Was verursacht das?Warum braucht eine vollkonvertierte Schicht mehr Zeit als die FC-Schicht in TensorFlow?
Ich nehme das grundlegende MNIST Beispiel von der Tensorflow Website. Jetzt wandle ich die endgültige FC Schicht auf eine Faltungsschicht, inspiriert von this post by Yann LeCunn und this Quora post, oder allgemeiner, um den Artikel Fully Convolutional Networks for Semantic Segmentation
Also ich diesen Code Block
with tf.name_scope("Fully_Connected") as scope:
W_fc1 = weight_variable([7**2 * 64, 1024], 'Fully_Connected_layer_1')
b_fc1 = bias_variable([1024], 'bias_for_Fully_Connected_Layer_1')
h_pool2_flat = tf.reshape(h_pool2, [-1, 7**2*64])
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)
Zu diesem Codeblock
with tf.name_scope("FC_conv") as scope:
W_fcc1 = weight_variable([7,7,64,1024],'FC_conv_1')
b_fcc1 = bias_variable([1024],'bias_for_FC_conv_1')
h_fcc1 = tf.nn.relu(tf.nn.conv2d(h_pool2, W_fcc1, strides=[1, 1, 1, 1], padding='VALID')+b_fcc1)
ändern
Nach dieser Änderung dauern 100 Iterationen 70 Sekunden im Gegensatz zu einigen Sekunden. Das bedeutet, dass die FC-Implementierung für 100 Iterationen ungefähr 5 Sekunden dauerte. Die vollständige Conv-Implementierung dauert ungefähr 70 Sekunden für 100 Iterationen.
Kann mir jemand einen Hinweis geben? Warum benötigt diese Faltungsimplementierung so viel Zeit?
Vielen Dank für Ihre Zeit und Antworten