TensorFlowを使用してマルチラベル分類を実装しようとしています(つまり、各出力パターンには多くのアクティブユニットがあります)。この問題は、クラスの不均衡(ラベル分布を非常に疎らにするラベル分布のものよりはるかにゼロ)を有する。テンソルフローとシグモイドクロスエントロピー損失との比較
問題に取り組む最も良い方法は、tf.nn.weighted_cross_entropy_with_logits
機能を使用することです。しかし、私はこのランタイムエラーが発生します:
ValueError: Tensor conversion requested dtype uint8 for Tensor with dtype float32
ここで何が間違っているのか分かりません。損失関数への入力として、私はラベルテンソル、logitsテンソル、および一定であるポジティブ・クラスの重みを、渡す:
positive_class_weight = 10
loss = tf.nn.weighted_cross_entropy_with_logits(targets=labels, logits=logits, pos_weight=positive_class_weight)
この問題を解決する方法についてのヒントを?私が同じラベルを渡してテンソルをtf.losses.sigmoid_cross_entropy
の損失関数に渡すと、すべてがうまくいきます(Tensorflowが適切に実行されますが、訓練予測は常にゼロです)。
関連する問題hereを参照してください。 tf.losses.sigmoid_cross_entropy
とtf.nn.weighted_cross_entropy_with_logits
間の唯一の大きな違いは、返さテンソルの形状であるため、
ありがとうございます。これで問題は解決しました。ラベルを明示的に 'float32'にキャストし、' tf.reduce_sum(...) 'を使って損失出力を減らさなければなりませんでした。 – Alberto