私は2つのクラスを持っています:正(1)と負(0)です。TensorFlow:バイナリ分類のためのクラスごとの損失関数を実装する方法
データセットは非常に不均衡なので、私のミニバッチにはほとんど0が含まれています。実際、多くのバッチには0しか含まれません。私は、正と負の例に対して別々のコストをかけて実験したかったのです。以下のコードを参照してください。
私のコードの問題は、多くのnan
があることです。なぜなら、bound_indexリストが空になるからです。これを解決するためのエレガントな方法は何ですか?
def calc_loss_debug(logits, labels):
logits = tf.reshape(logits, [-1])
labels = tf.reshape(labels, [-1])
index_bound = tf.where(tf.equal(labels, tf.constant(1, dtype=tf.float32)))
index_unbound = tf.where(tf.equal(labels, tf.constant(0, dtype=tf.float32)))
entropies = tf.nn.sigmoid_cross_entropy_with_logits(logits, labels)
entropies_bound = tf.gather(entropies, index_bound)
entropies_unbound = tf.gather(entropies, index_unbound)
loss_bound = tf.reduce_mean(entropies_bound)
loss_unbound = tf.reduce_mean(entropies_unbound)
私は空のリストの平均をとっているので(Entropies_boundは空になります) – Stackd