我正在使用Keras实现一个机器学习模型。对于这个模型,我编写了一个自定义的损失函数,其中损失是其他三个变量(a_cost, b_cost, c_cost)
性能的总和。损失函数运作正常,但我希望对其进行一些调整,为此我想查看这三个变量的行为。我该如何记录这些标量,以便它们能在TensorBoard中显示?
def custom_cost(y_true, y_pred): # 计算 a_cost, b_cost, c_cost cost = a_cost + b_cost + c_cost return cost# ..构建模型...model.compile(loss=custom_cost, optimizer=optimizers.Adam())tensorboard = callbacks.TensorBoard(log_dir="./logs", write_graph=True)tensorboard.set_model(model)model.fit_generator(generator=custom_generator, epochs=100, steps_per_epoch=180, callbacks=[tensorboard], verbose=True)
回答:
当a_cost
、b_cost
和c_cost
被计算时,您可以定义三个独立的函数来分别计算它们。假设如下:
def a_cost(y_true, y_pred): # 计算 a_cost ... return a_costdef b_cost(y_true, y_pred): # 计算 b_cost ... return b_costdef c_cost(y_true, y_pred): # 计算 c_cost ... return c_cost
现在,只需将这三个函数作为metrics
添加即可:
model.compile(..., metrics=[a_cost, b_cost, c_cost])