そこで、Keras を使用して畳み込みニューラル ネットワークを実装しています。デコード トポロジの最後には、シグモイド アクティベーションを備えた Conv2D レイヤーがあります。
decoded = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)
基本的に、シグモイドの実装を変更したいのですが、私の目標は、シグモイド関数が 0.5 未満の値を取得する場合は 0 を返し、0.5 以上の値を取得する場合は 1 を返すバイナリ型のアクティベーションにすることです。
Tensorflow 実装内を検索すると、シグモイドが次のようなものであることがわかりました。
def sigmoid(x, name=None):
with ops.name_scope(name, "Sigmoid", [x]) as name:
x = ops.convert_to_tensor(x, name="x")
return gen_math_ops._sigmoid(x, name=name)
gen_math_ops の戻り値を操作して、その値を 0.5 のしきい値と比較するのに問題があります。tensor 型の制限のために if が使用できないことはよくあることですが、これをどのように解決すればよいでしょうか?