как передать данные проверки в пользовательские обратные вызовы в tenorflow2.2.0r c -1 - PullRequest
0 голосов
/ 08 апреля 2020

Я пишу пользовательский обратный вызов, который оценивает оценку f1score au c. Однако при передаче validation_data в качестве параметра в функцию model.fit с параметром обратного вызова в качестве настраиваемого класса обратного вызова validation_data не передается в настраиваемый обратный вызов, и, следовательно, оценка моего пользовательского показателя c не удалась. Пожалуйста, дайте мне знать, как передать данные проверки в пользовательский обратный вызов. Я использую tenoflow 2.2.0-rc1. Вот мой код.

В моем коде я вызываю

history = model.fit (X_train, y_train, epochs = nb_epoch, batch_size = batch_size, validation_data = (X_cv, y_cv), обратные вызовы = [MyCustomCallback ()])

 class MyCustomCallback(tf.keras.callbacks.Callback):
  def on_train_begin(self, logs={}):
        self._data = []


  def on_epoch_end(self, epoch, logs={}):
    print(type(self.validation_data[0]))
    print(type(self.validation_data[1]))
    X_val, y_val = self.validation_data[0], self.validation_data[1]
    y_predict = np.asarray(model.predict(X_val))

    y_val = np.argmax(y_val, axis=1)
    y_predict = np.argmax(y_predict, axis=1)

    self._data.append({
      'val_microF1Score': f1_score(y_val, y_pred, average='micro'),
      'val_rocauc': roc_auc_score(y_val, y_predict),
      })

    print('The f1 score {:7.2f} and auc {:7.2f}  for epoch {} .'.format( logs['val_microF1Score'], logs['val_rocauc'],epoch))
    return

  def get_data(self):
    return self._data
...