Module ktrain.text.ner.anago.callbacks
Custom callbacks.
Expand source code
"""
Custom callbacks.
"""
from ....imports import *
class F1score(Callback):
def __init__(self, seq, preprocessor=None):
super(F1score, self).__init__()
self.seq = seq
self.p = preprocessor
def get_lengths(self, y_true):
lengths = []
for y in np.argmax(y_true, -1):
try:
i = list(y).index(0)
except ValueError:
i = len(y)
lengths.append(i)
return lengths
def on_epoch_end(self, epoch, logs={}):
label_true = []
label_pred = []
for i in range(len(self.seq)):
x_true, y_true = self.seq[i]
lengths = self.get_lengths(y_true)
y_pred = self.model.predict_on_batch(x_true)
y_true = self.p.inverse_transform(y_true, lengths)
y_pred = self.p.inverse_transform(y_pred, lengths)
label_true.extend(y_true)
label_pred.extend(y_pred)
score = ner_f1_score(label_true, label_pred)
print(' - f1: {:04.2f}'.format(score * 100))
print(ner_classification_report(label_true, label_pred))
logs['f1'] = score
Classes
class F1score (seq, preprocessor=None)-
Abstract base class used to build new callbacks.
Attributes
params- Dict. Training parameters (eg. verbosity, batch size, number of epochs…).
model- Instance of
keras.models.Model. Reference of the model being trained.
The
logsdictionary that callback methods take as argument will contain keys for quantities relevant to the current batch or epoch (see method-specific docstrings).Expand source code
class F1score(Callback): def __init__(self, seq, preprocessor=None): super(F1score, self).__init__() self.seq = seq self.p = preprocessor def get_lengths(self, y_true): lengths = [] for y in np.argmax(y_true, -1): try: i = list(y).index(0) except ValueError: i = len(y) lengths.append(i) return lengths def on_epoch_end(self, epoch, logs={}): label_true = [] label_pred = [] for i in range(len(self.seq)): x_true, y_true = self.seq[i] lengths = self.get_lengths(y_true) y_pred = self.model.predict_on_batch(x_true) y_true = self.p.inverse_transform(y_true, lengths) y_pred = self.p.inverse_transform(y_pred, lengths) label_true.extend(y_true) label_pred.extend(y_pred) score = ner_f1_score(label_true, label_pred) print(' - f1: {:04.2f}'.format(score * 100)) print(ner_classification_report(label_true, label_pred)) logs['f1'] = scoreAncestors
- tensorflow.python.keras.callbacks.Callback
Methods
def get_lengths(self, y_true)-
Expand source code
def get_lengths(self, y_true): lengths = [] for y in np.argmax(y_true, -1): try: i = list(y).index(0) except ValueError: i = len(y) lengths.append(i) return lengths def on_epoch_end(self, epoch, logs={})-
Called at the end of an epoch.
Subclasses should override for any actions to run. This function should only be called during TRAIN mode.
Arguments
epoch: Integer, index of epoch. logs: Dict, metric results for this training epoch, and for the validation epoch if validation is performed. Validation result keys are prefixed with
val_.Expand source code
def on_epoch_end(self, epoch, logs={}): label_true = [] label_pred = [] for i in range(len(self.seq)): x_true, y_true = self.seq[i] lengths = self.get_lengths(y_true) y_pred = self.model.predict_on_batch(x_true) y_true = self.p.inverse_transform(y_true, lengths) y_pred = self.p.inverse_transform(y_pred, lengths) label_true.extend(y_true) label_pred.extend(y_pred) score = ner_f1_score(label_true, label_pred) print(' - f1: {:04.2f}'.format(score * 100)) print(ner_classification_report(label_true, label_pred)) logs['f1'] = score