2017-07-21 4 views
-1

Quand j'utilisetf.nn.conv2d ne fonctionne pas sur mon code. mais tf.layer.conv2d fait. voulez savoir la différence

def main_conv_nn(images, training): 
    # Convolution 

    convFilterShape = [3, 3, 1, 32] 
    convFilterWeights = tf.Variable(tf.truncated_normal(convFilterShape, stddev=0.1)) 
    Layer1 = tf.nn.conv2d(images, convFilterWeights, strides= [1,1,1,1] , padding='SAME') 

Sa performance est inférieure à 20% de précision pour le code lié MNIST. Sa performance est vraiment mauvaise.

mais quand je l'ai changé mon code comme celui-ci,

def main_conv_nn(images, training): 
    # Convolution 

    #convFilterShape = [3, 3, 1, 32] 
    #convFilterWeights = tf.Variable(tf.truncated_normal(convFilterShape, stddev=0.1)) 
    #Layer1 = tf.nn.conv2d(images, convFilterWeights, strides= [1,1,1,1] , padding='SAME') 

    Layer1 = tf.layers.conv2d(images, 32, [5, 5], padding= 'same') 

cela fonctionne parfaitement.

POURQUOI tf.nn.conv2d ne fonctionne pas? (il n'y a pas d'erreur mais fonctionne bizarre)

+0

La différence est parce qu'ils utilisent des initialiseurs du noyau. La valeur par défaut pour 'layers.conv2d' est' variance_scaling_initializer'. –

Répondre

0

Vous pouvez vouloir tester dans des conditions identiques en premier. La taille du filtre conv est de 5 x 5 dans votre exemple de couches, et de 3 x 3 dans le premier. Le 3 x 3 peut être trop petit pour capturer certaines dépendances.

+0

J'ai changé la taille tellement de fois avant mais rien n'a été changé –

0
  1. tf.layers.conv2d sont convolution + biais

  2. tf.nn.conv2d est convolution seulement

+0

ne fonctionne toujours pas –