2016-10-07 9 views
0

合計損失ではなくトレーニング中にサンプル損失を得るにはどうすればよいですか?損失履歴は利用可能であり、バッチ損失の合計が得られますが、個々のサンプルの損失はありません。バース内の1サンプルあたりのケラスロス

on_batch_end(batch, logs, **sample_losses**) 

が利用でき、このようなものであり、あなたはいくつかのヒントを提供することができない場合はどのようにこれをサポートするためにコードを変更する:

私はこのような何かを持っていると思い可能であれば?

+1

ようこそスタックオーバーフロー!良い質問をするのを助けるために私たちの[SO Question Checklist](http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist)をよく読んで、良い答えを得てください。 –

答えて

1

私の知る限りでは、コールバックが呼び出されると損失が既に計算されているので、この情報をコールバックで取得することはできません(keras/engine/training.pyをご覧ください)。単純に損失を調べるには、損失機能を無効にすることができます。例:

def myloss(ytrue, ypred): 
    x = keras.objectives.mean_squared_error(ytrue, ypred) 
    return theano.printing.Print('loss for each sample')(x) 

model.compile(loss=myloss) 
+0

ありがとうございました....私はこのことについて試してみるつもりです。 –

+0

ありがとうございましたNemo ... ur天才....それは魅力的なように働いていました..... training.pyはこれらの値を得るために更新することができますコールバック経由で –

+0

あなたの問題を解決するのに役立ちましたら、回答を受け入れることを検討してください(チェックマークをクリックしてください)。これは概観で答えられたように問題を記入し、あなたが与えたアップワイヤーに追加点に答えた人に付与します。ありがとう。 – nemo

1

実際これはコールバックを使用して行うことができます。これはコールバックに関するkerasのドキュメントに含まれています。このような独自のコールバックを定義する

class LossHistory(keras.callbacks.Callback): 
    def on_train_begin(self, logs={}): 
     self.losses = [] 

    def on_batch_end(self, batch, logs={}): 
     self.losses.append(logs.get('loss')) 

このコールバックをモデルに渡します。あなたはバッチロスを履歴に追加する必要があります。

+1

私はバッチではなく、バッチ損失でサンプル損失ごとに探しています。 –

関連する問題