【发布时间】:2021-04-10 08:57:41
【问题描述】:
学习者,
我想用 mini-batches using a custom loss function 训练一个 NN。每个小批量包含n new samples and m replay samples。回放样本用于回放以避免遗忘。
我的损失 fnc 看起来像:
loss=mse(new_samples_truth, new_samples_pred) + factor*mse(replay_samples_truth, replay_sampls_pred)
如您所见,损失是为新样本和重放样本分别计算的两个 mse 的加权和。 这意味着每当我想训练一个批次时,我想分离新数据点和重放数据点并计算整个批次的标量损失。
如何在Keras 中实现此损失函数并将其与 train_on_batch 一起使用? Keras 的 train_on_batch 方法似乎使用损失函数分别计算小批量中每个数据点的损失。由于我的批次包含新的和重放数据点,这将不起作用。 So how can I Keras make calculate the Loss for the entire batch at once and return only once scalar? 另外,Keras 似乎单独评估了每个数据点的损失 fnc,并将每个样本的损失保存在一个数组中。但是,我想获得整个批次的损失。有人了解 Keras 是如何实际处理批次的损失计算的吗?
这是我的伪代码
batch=pd.concat([new_samples, replay_samples]) #new_samples and replay_samples are pd.dataframes
#len(batch) = 20
def my_replay_loss(factor):
def loss(y_true, y_pred): #y_true and y_pred come from keras
y_true_new_samples = y_true.head(10)
y_pred_new_samples = y_pred.head(10)
y_true_replay_samples = y_true.tail(10)
y_pred_replay_samples = y_pred.tail(10)
calc_loss = mse(y_true_new_samples, y_pred_new_samples) + factor*mse(y_true_replay_samples, y_pred_replay_samples)
return calc_loss
return loss
'''
【问题讨论】:
标签: tensorflow keras neural-network loss-function replay