Ich versuche, einen letzten arxiv work „Factorized CNN“tf.nn.depthwise_conv2d ist zu langsam. Es ist normal?
, riefen die hauptsächlich die räumlich Faltung (depth weises Faltung) zusammen mit kanalweise linearem Vorsprung (1x1conv) getrennt argumentiert, kann die Faltungsoperation beschleunigen .
this is the figure for their conv layer architecture
Ich fand heraus, dass ich diese Architektur mit tf.nn.depthwise_conv2d und 1x1 Faltung implementieren kann, oder mit tf.nn.separable_conv2d.
unten ist meine Implementierung:
#conv filter for depthwise convolution
depthwise_filter = tf.get_variable("depth_conv_w", [3,3,64,1], initializer=tf.random_normal_initializer(stddev=np.sqrt(2.0/9/32)))
#conv filter for linear channel projection
pointwise_filter = tf.get_variable("point_conv_w", [1,1,64,64], initializer=tf.random_normal_initializer(stddev=np.sqrt(2.0/1/64)))
conv_b = tf.get_variable("conv_b", [64], initializer=tf.constant_initializer(0))
#depthwise convolution, with multiplier 1
conv_tensor = tf.nn.relu(tf.nn.depthwise_conv2d(tensor, depthwise_filter, [1,1,1,1], padding='SAME'))
#linear channel projection with 1x1 convolution
conv_tensor = tf.nn.bias_add(tf.nn.conv2d(conv_tensor, pointwise_filter, [1,1,1,1], padding='VALID'), conv_b)
#residual
tensor = tf.add(tensor, conv_tensor)
Dies sollte etwa 9 mal schneller sein als die ursprüngliche 3x3x64 -> 64-Kanal-Faltung.
Allerdings kann ich keine Leistungsverbesserung erfahren.
Ich muss annehmen, dass ich das falsch mache, oder etwas stimmt nicht mit der Implementierung von Tensorflow.
Da es einige Beispiele gibt, die depthwise_conv2d verwenden, hinterlasse ich diese Frage hier.
Ist diese langsame Geschwindigkeit normal? oder gibt es einen Fehler?