2017-10-06 11 views
0

私のネットワークの出力はpropabilityのリストです.tf.round()を使って丸めて0または1にすると、これはこのプロジェクトにとって重要です。 私は、tf.roundが微分可能でないことを知りましたので、私はそこで少し失われてしまいます。:/Tensorflowの微分ラウンド関数?

答えて

1

丸みは基本的に区別不能な関数なので、そこから運が悪いです。このような状況の通常の手順は、期待値を計算するためにそれらを使用するか、または出力される最大確率を取り、その予測をネットワークの予測として選択するなど、確率を使用する方法を見つけることです。あなたの損失関数を計算するためにアウトプットを使用していない場合は、先に進んで結果に適用するだけで差異があるかどうかは問題になりません。ネットワークをトレーニングする目的で有益な損失関数が必要な場合は、確率の形式で出力を維持することが実際にあなたの利益になるかどうかを検討する必要があります(トレーニングプロセスをスムーズにする可能性があります)トレーニング後に、ネットワークの外で実際の見積もりに変換することができます。

+0

マイ出力しかし、トレーニングデータの出力の大部分が0であるため、ネットワークは0〜0.0001の非常に低い値を出力することを学習するだけであり、実際にはここで失われてしまいます。だから私はそれが1または0を出力することを強制的に考えた..私はちょうどラウンド関数の派生物が仮定されている代わりに1を置くことについて考えたが、再び私はTensorflowを使用する私は、 – ronsap123

0

あなたは事実を使用できるtf.maximum()とtf.minimum()微分可能であり、入力が0から1

# round numbers less than 0.5 to zero; 
# by making them negative and taking the maximum with 0 
differentiable_round = tf.maximum(x-0.499,0) 
# scale the remaining numbers (0 to 0.5) to greater than 1 
# the other half (zeros) is not affected by multiplication 
differentiable_round = differentiable_round * 10000 
# take the minimum with 1 
differentiable_round = tf.minimum(differentiable_round, 1) 

例に確率である:

[0.1,  0.5,  0.7] 
[-0.0989, 0.001, 0.20099] # x - 0.499 
[0,  0.001, 0.20099] # max(x-0.499, 0) 
[0,   10, 2009.9] # max(x-0.499, 0) * 10000 
[0,   1.0,  1.0] # min(max(x-0.499, 0) * 10000, 1)