テンソルフロー派の皆さんこんにちは!
次のスキーマがあります。
いくつかの連続変数 (実際には、Google word2vec から取得した単語の埋め込み) を入力し、連続変数と離散変数の両方と見なすことができる出力を予測しようとしています (申し訳ありませんが、数学者ですが、実際にはトレーニングの目標によって異なります)。出力は 0 から 1000 までの値を 0.25 (または高精度ハイパーパラメーター) の間隔で取ります。つまり、0、0.25、0.50、...、100.0 です。
tf.to_int (必要に応じて分数を省略できます) や tf.round などを含めることができないことはわかっています。これらは微分可能ではないため、逆伝播できません。ただし、ネットワークが丸められたソリューションを検索していることを「認識」できるソリューションがあると思います.0.25、5.75などの整数の小さな分数ですが、実際にはどこを見ればよいかさえわかりません。量子化を調べましたが、それは少しやり過ぎのようです。
だから私の質問は:
- 0.0 未満の値を受け入れないことをグラフに通知するにはどうすればよいですか? ネットワーク出力の「ロジット」(回帰予測)で abs を実行することは、検討する価値があるでしょうか? いいえの場合、0 未満のスコアを厳しく処罰し、二乗誤差の代わりに絶対誤差を使用するように損失項を変更できますか? 私はそれを行うことの完全な結果に気づいていないかもしれません
- 4.5 の予測が 4.49999 であるか 4.4 であるかは気にしません。精度を得るために予測を最も近い .25 に切り上げるためです。これが私の最終的なモデル評価メトリックです。もしそうなら、私は使用できますか?
precision = 0.01 # so that sqrt(precision) == 0.1
loss=tf.reduce_mean(tf.max(0, tf.square(tf.sub(logits, targets)) - precision ))