私はオブジェクトが画像に存在するかどうかを予測するDNNを構築しています。マイネットワークは、2つの隠し層を持っており、最後の層は、次のようになります。ランクの不一致:ラベルのランク(受け取った2)は、ロジットのランクマイナス1(受け取った2)と一致する必要があります
# Output layer
W_fc2 = weight_variable([2048, 1])
b_fc2 = bias_variable([1])
y = tf.matmul(h_fc1, W_fc2) + b_fc2
その後、私はラベルのプレースホルダがあります。
y_ = tf.placeholder(tf.float32, [None, 1], 'Output')
を私は(バッチでトレーニングを実行するため、出力層形状の最初の引数はNoneです)。
私は、次の損失関数を使用します。
cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(
y[:, :1], y_[:, :1], name='xentropy')
loss = tf.reduce_mean(cross_entropy, name='xentropy_mean')
predict_hand = tf.greater(y, 0.5)
correct_prediction = tf.equal(tf.to_float(predict_hand), y_)
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
をしかし、実行時に、私は次のエラーを得た:
Rank mismatch: Rank of labels (received 2) should equal rank of logits minus 1 (received 2).
私はそれを期待するのかわからラベル層を再形成ではなく、必要がありますね。私はdocumentationに見上げると、それは言う:
logits: Unscaled log probabilities of rank r and shape [d_0, d_1, ..., d_{r-2}, num_classes] and dtype float32 or float64. labels: Tensor of shape [d_0, d_1, ..., d_{r-2}] and dtype int32 or int64. Each entry in labels must be an index in [0, num_classes).
私はちょうど単一のクラスを持っている場合は、どのような私のラベルは(今それだけで0または1である)のようになりますか?すべてのヘルプはtf.nn.sparse_softmax_cross_entropy_with_logits
用ドキュメント*から
私はこれを試しましたが、別のエラーが発生しました。Tensor u'Output:0 'のシェイプ(44,1)の値を'(?、) 'の形で送ることができません。ここで、44はバッチサイズです。 –
私は、シェイプ(?、)のプレースホルダーテンソルにshape(44,1)というラベルのnumpy配列を与えていると思います。 label.flatten()でラベルnumpy配列を平坦化してみてください。これで(44,1)が(44、)に変わります –