2017-11-27 3 views
0

Ich versuche, Batch-Normalisierung in einem conv2d_transpose wie folgt zu verwenden:TensorFlow Batch Normalisierungs Dimension

h1 = tf.layers.conv2d_transpose(inputs, 64, 4, 2, padding='SAME', 
    kernel_initializer=tf.variance_scaling_initializer, 
    bias_initializer=tf.ones_initializer, 
    activity_regularizer=tf.layers.batch_normalization, 
) 
h2 = tf.layers.conv2d_transpose(h1, 3, 4, 2, padding='SAME', 
    kernel_initializer=tf.variance_scaling_initializer, 
    bias_initializer=tf.ones_initializer, 
    activity_regularizer=tf.layers.batch_normalization, 
) 

Und Ich erhalte den folgenden Fehler:

ValueError: Dimension 1 in both shapes must be equal, but are 32 and 64 
From merging shape 2 with other shapes. for 'tower0/AddN' (op: 'AddN') with input shapes: [?,32,32,64], [?,64,64,3]. 

ich, dass andere Leute gesehen habe Ich hatte diesen Fehler in Keras wegen der unterschiedlichen Dimensionsreihenfolge zwischen TensorFlow und Theano. Allerdings verwende ich reines TensorFlow, alle meine Variablen sind im TensorFlow-Dimensionsformat (batch_size, height, width, channels), und die data_format der Conv2D_Transpose-Ebene sollte die Standardeinstellung 'channels_last' sein. Was fehlt mir hier?

Antwort

1

tf.layers.batch_normalization sollte als Layer hinzugefügt werden, kein Regularizer. activity_regularizer ist eine Funktion, die Aktivität (Layer-Ausgabe) benötigt und einen zusätzlichen Verlustausdruck erzeugt, der zum gesamten Verlustausdruck des gesamten Netzwerks hinzugefügt wird. Beispielsweise möchten Sie möglicherweise Netzwerke mit hoher Aktivierung bestrafen. Sie können sehen, wie activity_regularizer an den Ausgängen aufgerufen wird und das Ergebnis zum Verlust here hinzugefügt wird.

Verwandte Themen