gpt4 book ai didi

python - 如何将自定义指标的值从自定义回调附加到我需要在张量板中使用的 "logs"?

转载 作者:行者123 更新时间:2023-12-04 13:55:21 25 4
gpt4 key购买 nike

我需要实现一个自定义回调来计算每个时期后的 AUC,我需要将其用作基于 LSTM 的神经网络中的指标。这是自定义回调:

from tensorflow.keras.callbacks import Callback
class RocCallback(Callback):
def __init__(self,training_data,validation_data):
self.x = training_data[0]
self.y = training_data[1]
self.x_val = validation_data[0]
self.y_val = validation_data[1]



def on_train_begin(self, logs={}):
self.roc_train_list = []
self.roc_val_list = []
self.roc_train=0
self.roc_val=0
logs["roc_train"] = []
logs["roc_val"] = []
return


def on_epoch_end(self, epoch, logs):
y_pred_train = self.model.predict(self.x)
roc_train = roc_auc_score(self.y, y_pred_train)
y_pred_val = self.model.predict(self.x_val)
roc_val = roc_auc_score(self.y_val, y_pred_val)
#print('\rroc-auc_train: %s - roc-auc_val: %s' % (str(round(roc_train,4)),str(round(roc_val,4))),end=100*' '+'\n')

# self.history['roc_auc_train'].append(round(roc_train,4))

# self.history['roc_auc_val'].append(round(roc_val,4))
self.roc_train = round(roc_train,4)
self.roc_val = round(roc_val,4)
self.roc_train_list.append(self.roc_train)
self.roc_val_list.append(self.roc_val)
print("\rroc_train: %f — roc_val: %f" %(self.roc_train, self.roc_val))

logs["roc_train"]= self.roc_train
logs["roc_val"] = self.roc_val

return logs
有两件事不能正常工作:
  • print("\rroc_train: %f — roc_val: %f" %(self.roc_train, self.roc_val))在纪元进度条之前打印,但需要在之后打印
    例如:
  • Epoch 2/20
    roc_train: 0.550000 — roc_val: 0.547800
    2561/2561 [==============================] - 89s 35ms/step - loss: 0.5326 - val_loss: 0.4513
    Epoch 3/20
    roc_train: 0.559800 — roc_val: 0.558000
    2561/2561 [==============================] - 88s 34ms/step - loss: 0.5049 - val_loss: 0.4406
  • tensorboard 中的日志只有 epoch_loss 作为度量,但没有“roc_train”或“roc_val”值。
    我试过
  • logs["roc_train"].append(self.roc_train)
    logs["roc_val"].append(self.roc_val)
    但它引发了一个关键错误。

    最佳答案

    作为快速替代方案,您是否尝试过使用内置 https://www.tensorflow.org/api_docs/python/tf/keras/metrics/AUC , 公制,

    tf.keras.metrics.AUC(
    num_thresholds=200, curve='ROC', summation_method='interpolation', name=None,
    dtype=None, thresholds=None, multi_label=False, label_weights=None
    )
    它可以暂时解决您的问题。
    你的代码确实没有错;在model.fit()的回调列表中,能否请您将回调放在列表的第一个位置;在我的情况下,我想一次保存到 .csv 并且 CustomMetric() 回调是最后一次,因此 .csv 只保存了 loss 和 val_loss 而不是我的自定义指标。

    关于python - 如何将自定义指标的值从自定义回调附加到我需要在张量板中使用的 "logs"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63543836/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com