2017-08-14 12 views
0

私はTensorflowでKerasを使用しています。私はLSTM-CRF modelを作成したいので が、私はtf.contrib.crf.crf_log_likelihoodを使用して独自の損失関数を定義した:損失関数の変数をインスタンス変数に格納する方法

def loss(self, y_true, y_pred): 
    sequence_lengths = ... # calc from y_true 
    log_likelihood, transition_params = tf.contrib.crf.crf_log_likelihood(y_pred, y_true, sequence_lengths) 
    loss = tf.reduce_mean(-log_likelihood) 
    self.transition_params = transition_params 

    return loss 

ご存知のように、CRFは、予測フェーズに移行のparamsを必要とします。そこでtransition_paramsをインスタンス変数に保存しました。セルフトランジションパララムです。

問題は、minibatch中にself.transition_paramsが更新されていないことです。私の見解によれば、それはモデルをコンパイルするときに一度だけ格納されるようです。

損失関数の変数をKerasのインスタンス変数に保存する方法はありますか?

答えて

2

問題は間違った機能の署名tf.contrib.crf.crf_log_likelihoodです。現在のトランジションパラメータでtransition_paramsを渡す必要があります。変更後にも同じことが解決されます。

log_likelihood, transition_params = 
    tf.contrib.crf.crf_log_likelihood(y_pred, y_true, sequence_lengths, 
    transition_params=self.transition_params) 
関連する問題