Keras 在自定义损失函数中访问单个值
Posted
技术标签:
【中文标题】Keras 在自定义损失函数中访问单个值【英文标题】:Keras access individual values in custom loss function 【发布时间】:2019-01-15 19:15:48 【问题描述】:我想实现如下损失函数:
接收一批维度(batch_size, number_out_nodes) 对每一行/样本应用一个 scipy 函数,将其映射到一个实数 合并批次中所有样本的结果我已经使用 numpy 数组作为输入编写了函数。
看起来像这样:
def loss_func(y_true, y_pred):
y_pred = np.array(y_pred)
list_of_factors = [4]*len(y_pred)
val = 0
for idx, factor in list_of_factors:
val += factor*scipy_func(y_pred[idx])
return val
有没有办法将此函数实现为 Keras 损失函数?我不知道如何访问该批次的各个样本。
谢谢
【问题讨论】:
【参考方案1】:您不能应用任何 scipy 函数,因为您在损失函数中获得的变量是 张量,而不是 nD NumPy 数组。所以损失函数中没有 NumPy 或 SciPy 以张量为参数。
根据您的 scipy 函数 是什么,您也许可以使用 Keras backend 中提供的操作来实现它。大多数函数类似于 NumPy 操作,但作用于张量。
看看existing loss functions 以及他们如何使用这些后端函数对张量进行操作。
【讨论】:
谢谢。但是我可以像在列表/数组中那样循环批处理中的不同样本(即使它们是张量)? 是的,您可以,但通常最好只执行向量操作,而不是使用任何 for 循环。以上是关于Keras 在自定义损失函数中访问单个值的主要内容,如果未能解决你的问题,请参考以下文章