Как повторить значение тензора внутри пользовательской функции потерь? - PullRequest
0 голосов
/ 29 мая 2020

Я использую 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 или другую функцию для достижения этого внутри функции потерь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...