2

トレーニング中にアルゴリズムがどのように機能するかを知るために、トリプレット損失ネットワークの精度関数を実装したいと考えています。これまでのところ、何かを試してみましたが、実際に機能するかどうかはわかりませんし、ケラスでの実装にも問題があります。私の考えは、予測されたアンカーの正とアンカーの負の距離を比較することでした(y_pred)。これにより、正の距離が十分に小さく、負の距離が十分に大きくなるはずです。

def accuracy(_, y_pred):
    pos_treshold = 0.4
    neg_treshold = 0.6
    return K.mean(y_pred[0] < pos_treshold and y_pred[1] > neg_treshold)

andこれに関する問題は、keras でこの条件を実装する方法を理解できなかったことです。

次に、トリプレット損失の精度に関するこのトピックについて何かを見つけようとしました。これを行う 1 つの方法は、アンカー イメージとポジティブ イメージの間の予測距離がアンカー イメージとネガティブ イメージの間の予測距離よりも小さいトリプレットの数の比率として精度を定義することです。これにより、ケラスでの実装にさらに大きな問題があります。

私はこれを試しました(ただし、それが私が説明したことを行うかどうかはわかりません):

K.mean(y_pred[0] < y_pred[1])

これにより、常に約0.5の精度が得られます(おそらくランダムなものです)。だからまだモデルが悪いのか精度関数が悪いのかわからない。

だから私の質問は、ケラスで合理的な精度関数を実装する方法ですか? この2つのうちの1つになるかどうかは、あまり気にしません。

4

1 に答える 1