Я использую keras (v 2.3.0, с tensorflow v 2.2) в R, пытаясь написать пользовательскую функцию потерь, используя бэкэнд-функции keras.
Внутри пользовательской функции потерь у меня, по сути, есть тензоры
a <- 2.5
b <- 1:5
a_k <- k_constant(a)
b_k <- k_constant(b)
и теперь вы хотите создать c_k
, который имеет форму tf.Tensor([2.5 2.5 2.5 2.5 2.5], shape=(5,), dtype=float32)
, поэтому значение a_k повторяется в форме, как у b_k.
Тестирование различных вещей , Я обнаружил, что все следующие действия работают при простом выполнении:
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'.
Следующее, по крайней мере, не приводит к ошибке:
c_k <- k_constant(2.5, shape = length(b_k))
, но значение 2,5 не фиксировано, поскольку это значение y_true
.
Как правильно использовать k_constant
или другую функцию для достижения этого внутри функции потерь?