R Keras: создайте тензор более высокого ранга, чтобы применить redu_mean () - PullRequest
0 голосов
/ 15 апреля 2020

Я хотел бы использовать tf$reduce_mean() в списке тензоров, который я создал и сохранил в list(). Как вы можете взять список тензоров и создать тензор более высокого ранга, который имеет эти отдельные тензоры в качестве записей в позиции axis=0 нового тензора? Я думаю, что в Python вы берете список и используете np.newaxis, чтобы это произошло (tf$newaxis).

Я предполагаю, что большой вопрос заключается в следующем: когда TensorFlow в Python передает списки своим функциям, как, например:

tf.concat([a, b, c], 0)

Что такое параллельная конструкция в R Keras? Как вы увидите ниже, перенос list() не работает так, как я его пробовал.

Вот как я могу сделать простой пример в базе R, используя array() и apply():

## reduce_mean() behavior I want -- mean across the matrix elements:
a <- matrix(1:4)
b <- matrix(5:8)
c <- matrix(9:12)

## How to do this in base R
(abc <- array(c(a, b, c), dim = c(2, 2, 3)))
#> , , 1
#> 
#>      [,1] [,2]
#> [1,]    1    3
#> [2,]    2    4
#> 
#> , , 2
#> 
#>      [,1] [,2]
#> [1,]    5    7
#> [2,]    6    8
#> 
#> , , 3
#> 
#>      [,1] [,2]
#> [1,]    9   11
#> [2,]   10   12

apply(abc, MARGIN = c(1,2), FUN = mean)
#>      [,1] [,2]
#> [1,]    5    7
#> [2,]    6    8

Создано в 2020-04-14 пакетом представ. (v0.3.0)

Предположение относительно того, что должно быть выглядеть в TensorFlow:

library(tensorflow)

a <- tf$constant(array(1:4, dim=c(2,2)))
b <- tf$constant(array(5:8, dim=c(2,2)))
c <- tf$constant(array(9:12, dim=c(2,2)))


## Does not work
abc <- list(a, b, c)
# tf$reduce_mean(abc, axis=0)

1 Ответ

1 голос
/ 15 апреля 2020

Вы можете использовать tf$stack:

a <- tf$constant(array(1:4, dim=c(2,2)))
b <- tf$constant(array(5:8, dim=c(2,2)))
c <- tf$constant(array(9:12, dim=c(2,2)))

abc <- tf$stack(list(a, b, c), axis=0L)

#> tf.Tensor(
#> [[[ 1  3]
#>   [ 2  4]]
#> 
#>  [[ 5  7]
#>   [ 6  8]]
#> 
#>  [[ 9 11]
#>   [10 12]]], shape=(3, 2, 2), dtype=int32)

tf$reduce_mean(abc, axis=0L)

#> tf.Tensor(
#> [[5 7]
#>  [6 8]], shape=(2, 2), dtype=int32)

Примечание: не забудьте поставить L после номера оси, чтобы преобразовать его в целое число.

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