Я хочу изменить свой class_weight во время тренировки в Керасе.
Я использовал fit_generator
и Callback
метод, как показано ниже.
model.fit_generator(
decoder_generator(x_train, y_train),
steps_per_epoch=len(x_train),
epochs=args.epochs,
validation_data=decoder_generator(x_valid, y_valid),
validation_steps=len(x_valid),
callbacks=callback_list,
class_weight=class_weights,
verbose=1)
И
class Valid_checker(keras.callbacks.Callback):
def __init__(self, model_name, patience, val_data, x_length):
super().__init__()
self.best_score = 0
self.patience = patience
self.current_patience = 0
self.model_name = model_name
self.validation_data = val_data
self.x_length = x_length
def on_epoch_end(self, epoch, logs={}):
X_val, y_val = self.validation_data
y_predict, x_predict = model.predict_generator(no_decoder_generator(X_val, y_val), steps=len(X_val))
y_predict = np.asarray(y_predict)
x_predict = np.asarray(x_predict)
decoder_generator
и no_decoder_generator
- просто пользовательский генератор.
Я хочу менять вес класса каждый раз, когда заканчивается эпоха. Является ли это возможным? Тогда как я могу это сделать?
Мои данные являются несбалансированными данными, и переоснащение продолжается для одного класса.
В конце эпохи я хочу увеличить вес для классов с низкой точностью, рассчитав точность по классам.
Как мне это сделать?