2017-12-21 26 views
3

私はこの分野の研究には何もないので、おそらくこれはかなりばかげた質問です。私は通常のANNを構築したいが、私は損失関数として加重平均二乗誤差を使用できるかどうか分からない。 各サンプルを等しく扱っていない場合、私は、サンプルのカテゴリのいくつかについて他のものよりも予測精度をより重視し、重み付けされた損失関数を作成したいと考えています。 はiはサンプルのインデックスであり、かつ簡単にするために、我々は0または1だから、どちらか、この機能は、バイナリ値をとると仮定し、我々はニューラルネットワークモデルは、損失関数として加重平均(Sum)二乗誤差を使用できますか?

(ci + 1)(yi_hat - yi)^2 

#and take the sum for all i 
として損失関数を形成することができ、我々はカテゴリ機能 ciを持っている、と言うことができます

バックプロパゲーションに問題がありますか?グラデーションの計算やレイヤー間のウェイトの更新に関しては何の問題もありません。 そして、問題がなければ、Kerasでこの損失関数をどのようにプログラムできますか?損失関数はy_truey_predの2つのパラメータしかとらないので、ベクトルcをどのように差し込むことができますか?

+2

、これは非常に良い質問になる可能性を持っているように私は感じますしかし、これはスタックオーバーフローのための最良のフォーマットにはなりません。試したコードを見せることができますか?質問をフォーマットしてみてください。今すぐ各ステップに従うのは難しいかもしれないテキストのブロックです – MattR

答えて

1

これは絶対に問題ありません。関数が自分自身をwithing定数を宣言したり、外部の範囲から定数を取ることができます。

import keras.backend as K 

c = K.constant([c1,c2,c3,c4,...,cn]) 

def weighted_loss(y_true,y_pred): 
    loss = keras.losses.get('mse') 
    return c * loss(y_true,y_pred) 

まさにあなたのように:

def weighted_loss(y_true,y_pred): 

    weighted = (c+1)*K.square(y_true-y_pred) 
    return K.sum(weighted) 
+0

多くのありがとう!ですから、定数はすべてK.constantを使って再定義する必要があります。ベクトルをテンソルに単純に乗算することはできません。 –

+0

はい。スカラーの番号は使用できますが、リストは使用できません。 (私が知っているわけではない)。 –

関連する問題