【问题标题】:How to store variable in loss function into instance variable如何将损失函数中的变量存储到实例变量中
【发布时间】:2017-08-14 03:21:04
【问题描述】:

我正在使用带有 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 在预测阶段需要转换参数。所以我将 transition_params 存储到实例变量 self.transition_params 中。

问题是 self.transition_params 在小批量期间从未更新过。根据我的观察,编译模型时似乎只存储了一次。

有没有办法将损失函数中的变量存储到 Keras 中的实例变量中?

【问题讨论】:

    标签: python machine-learning tensorflow nlp keras


    【解决方案1】:

    问题是错误的函数签名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)
    

    【讨论】:

      猜你喜欢
      • 2019-11-03
      • 2022-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-03
      • 2022-01-07
      • 2013-08-06
      相关资源
      最近更新 更多