我在R中使用keras(v 2.3.0,带有tensorflow v 2.2),试图使用keras后端函数编写自定义损失函数。
在自定义损失函数中,我基本上有张量
\n
现在要创建一个a <- 2.5
b <- 1:5
a_k <- k_constant(a)
b_k <- k_constant(b)
形式的c_k
,因此a_k的值以b_k的形式重复。
通过测试各种事物,我发现以下所有内容在执行时都有效:
tf.Tensor([2.5 2.5 2.5 2.5 2.5], shape=(5,), dtype=float32)
但是当我在c_k1 <- k_constant(a_k, shape = k_shape(b_k))
c_k2 <- k_constant(a_k, shape = length(b_k))
c_k3 <- k_constant(k_eval(a_k), shape = length(b_k))
中使用这些自定义损失函数时,这些选项都不起作用
以下是错误消息:
model %>% compile
以下至少不会产生错误:
c_k1 <- k_constant(a_k, shape = k_shape(b_k))
# RuntimeError: Evaluation error: NotImplementedError: Cannot convert a symbolic Tensor (loss_31/dense_65_loss/Shape:0) to a numpy array..
c_k2 <- k_constant(a_k, shape = length(b_k))
RuntimeError: Evaluation error: TypeError: Expected float32, got <tf.Tensor 'dense_67_target:0' shape=(None, None) dtype=float32> of type 'Tensor' instead..
c_k3 <- k_constant(k_eval(a_k), shape = length(b_k))
RuntimeError: Evaluation error: AttributeError: 'Tensor' object has no attribute '_numpy'.
但是2.5的值不是固定的,因为它是c_k <- k_constant(2.5, shape = length(b_k))
的值。
如何在损失函数中正确使用y_true
或其他函数来实现此目的?