2017-11-27 11 views
0

私は次のようにconv2d_transposeでバッチ正規化を使用しようとしている:私は他の人ことを見てきましたTensorFlowバッチ正規寸法

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]. 

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, 
) 

そして、私は、次のエラーが発生しますTensorFlowとTheanoのディメンションの順序が異なるため、Kerasでこのエラーが発生しました。しかし、純粋なTensorFlowを使用しています。私の変数はすべてTensorFlowディメンション形式(batch_size, height, width, channels)であり、conv2d_transposeレイヤーのdata_formatはデフォルトの'channels_last'である必要があります。私はここで何が欠けていますか?

答えて

1

tf.layers.batch_normalizationは、正規化されたものではなく、レイヤーとして追加する必要があります。 activity_regularizerは、アクティビティ(レイヤの出力)をとり、ネットワーク全体の全体的な損失期間に追加される余分な損失期間を生成する関数です。たとえば、高いアクティベーションを生成するネットワークにペナルティを課すことができます。 activity_regularizerが出力でどのように呼び出され、その結果が損失hereに追加されたかを見ることができます。

関連する問題