如何在keras批量更新期间缩放梯度?

How to scale the gradient during batch update in keras?

我正在使用标准的 keras 模型,并且正在批量训练(使用 train_on_batch 函数)。现在,我想获取批次中每个元素的梯度并对其进行缩放(将每个样本梯度乘以我拥有的样本特定值),在缩放每个梯度后,可以将其相加并用于更新现有权重。反正有没有给定的keras功能呢?如果没有,我有没有办法使用 tensorflow 来操纵它? (给定模型,其余部分是用keras编写的)

函数看起来像这样:(循环是为了说明它发生在批次中的所有样本上)

grad = 0, w= #array of size batch_size
for i in batch_size:
    grad <- grad + w_i*grad_i
  • 在模型的 fit 方法中使用 sample_weights 参数。
  • 或者,如果使用生成器,则使生成器 return 不仅 X_train, y_train,而且 X_train, y_train, sample_weights

在这两种情况下,sample_weights 应该是一维向量,样本数与数据相同。