2017-03-12 24 views
3

私はKerasで遊んでいて、文脈の中から単語を予測しようとします。文から「私は食べ物がおいしかったと言わざるを得ない!」私はこのような何かを取得したいと考えています。しかしカスタム損失関数:バイナリクロスエントロピー誤差に重みを適用する

[say the ? was tasty] -> food, meals, spaghetti, drinks 

を、私の問題は、現在、私はトレーニングしていますネットワークはのちょうど確率を学ぶように見えるということです単一の単語であり、特定の文脈においてそれらが有する可能性はない。

言葉の頻度がバランスしていないので、私は、私の損失関数に加重を適用することができると思っていました。現在はバイナリクロスエントロピー関数です。

私は単にエラーと各単語の逆確率を掛け:

def weighted_binary_crossentropy(y_true, y_pred): 
    return K.mean(K.binary_crossentropy(y_pred, y_true) * (1-word_weights), axis=1) 

この関数は、損失関数としてモデルによって使用されている:

model.compile(optimizer='adam', loss=weighted_binary_crossentropy) 

はしかし、私の結果は正確です私のモデルが壊れているかどうか、または私がlossパラメタ/機能を間違って使用しているかどうかは分かりません。

は私の説明したばかりのweighted_binary_crossentropy()です。何らかの理由で、これは似ていますので、私は尋ねた: word_weights)、軸= 1)

答えて

1

を実際に、1はfit機能のdocumentationに読むことができるよう、一つはあなたが使用したい正確に何であると思われsample_weightsを提供することができます。

+0

"*時間的にサンプルの重み付け(2D重み付け)を行う必要がある場合は、これを"時間的 "に設定します"実際には音が出ないサンプルワイズの重み(1D)私はそれが私がしたいと思っているので、それは各出力次元の誤差を重み付けするかのように私に与えます。 – displayname

+0

あなたのネットワーク出力を指定してください。 –

+0

適用したいこの重みは単語ごとに異なりますか? –

関連する問題