keras 构建Custom Loss并从y_pred访问数据

ppcbkaq5  于 2023-01-30  发布在  其他
关注(0)|答案(1)|浏览(105)

我正在处理一个回归问题,以重构信息来减轻邻居传感器的串扰效应,我想更改损耗函数,以便在自定义损耗函数的中间步骤中评估标准差。
下面是我想要实现的代码:
我的y_pred作为形状(nEvents, 100)
我发现了许多例子来创建我的损失函数如下:

import backend as K
def my_loss_func1(y_true, y_pred):
    return K.mean(K.square(y_pred - y_actual) + K.square(layer), axis=-1)

但在这些示例中,我没有找到如何访问y_pred(TensorFlow变量)内部的数据。在所有示例中,它只是使用后端的一个函数来计算损耗,并将y_predy_true作为参数传递。
我需要做的是:

def my_loss_func2(y_true, y_pred):
    samples = y_pred( <HOW DO TO GET THE VALUES?> )
    cells   = int(samples.shape[1]/4)

    AmpRec  = np.tensordot(samples.reshape(samples.shape[0], signals, nSamp),ai, axes=(2,0))
    TimeRec = np.tensordot(samples.reshape(samples.shape[0], signals, nSamp),ai, axes=(2,0))/AmpRec
    
    return K.std(TimeRec)

我想改进和更新我的模型以调整权重,同时考虑与timeRec排列(std)有关的optimal_filter输出。
有人评估过像我想做的那样访问y_pred的损失函数吗?

o3imoua4

o3imoua41#

今天,几天后...
我找到了一个解决方案,阅读后how to print Keras tensors .
存在一些操纵Tensor的方法,例如:

K.eva(tensor)
K.print_tensor(tensor)
...

但要启用这些功能,必须在模型编译方法上添加 *run_eregly *:

model.compile(..., run_eagerly = True)

在这一步之后,您可以访问Tensor信息以根据需要进行操作。

相关问题