覆盖拟合函数后缺少 val_loss 和 val_accuracy

Missing val_loss and val_accuracy after overriding the fit function

按照Keras Tuner's documentation实现自定义objective函数,我的模型class的拟合函数如下:

class HyperAE(kt.HyperModel):
  def build(self, hp):
      ...
  
  def fit(self, hp, model, x, y, validation_data, **kwargs):
      model.fit(x, y, **kwargs)
      x_val, y_val = validation_data
      y_pred = model.predict(x_val)
      return {
        "metric_1": -np.mean(np.abs(y_pred - y_val)),
        "metric_2": np.mean(np.square(y_pred - y_val)),
      }

当 运行 使用此模型的调谐器时,我看不到 val_loss 和其他像以前一样打印的验证指标。我怎样才能让它们再次打印?

发生这种情况是因为 validation_data 没有传递给实际的 model.fit 函数调用。问题可以通过以下方式解决:

class HyperAE(kt.HyperModel):
  def build(self, hp):
      ...
  
  def fit(self, hp, model, x, y, validation_data, **kwargs):
      model.fit(x=x, y=y, validation_data=validation_data, **kwargs)
      x_val, y_val = validation_data
      y_pred = model.predict(x_val)
      return {
        "metric_1": -np.mean(np.abs(y_pred - y_val)),
        "metric_2": np.mean(np.square(y_pred - y_val)),
      }