Python R Keras:创建更高阶的张量以应用reduce_mean()

Python R Keras:创建更高阶的张量以应用reduce_mean(),python,r,tensorflow,keras,Python,R,Tensorflow,Keras,我想在我创建并存储在列表()中的张量列表上使用tf$reduce\u mean()。如何获取一个张量列表,并生成一个更高秩的张量,将这些单独的张量作为新张量的axis=0位置的条目?我认为在Python中,可以使用列表并使用np.newaxis来实现这一点(tf$newaxis) 我想更大的问题是:当Python中的TensorFlow将列表传递给其函数时,例如: tf.concat([a,b,c],0) R Keras中的平行结构是什么?正如您将在下面看到的,包装list()与我尝试的方式不

我想在我创建并存储在
列表()中的张量列表上使用
tf$reduce\u mean()
。如何获取一个张量列表,并生成一个更高秩的张量,将这些单独的张量作为新张量的
axis=0
位置的条目?我认为在Python中,可以使用列表并使用
np.newaxis
来实现这一点(
tf$newaxis

我想更大的问题是:当Python中的TensorFlow将列表传递给其函数时,例如:

tf.concat([a,b,c],0)
R Keras中的平行结构是什么?正如您将在下面看到的,包装
list()
与我尝试的方式不一样

下面是如何使用
array()
apply()
在base R中执行一个简单示例:

##reduce#mean()我想要的行为--矩阵元素的平均值:
a[1,]13
#> [2,]    2    4
#> 
#> , 2
#> 
#>      [,1] [,2]
#> [1,]    5    7
#> [2,]    6    8
#> 
#> , 3
#> 
#>      [,1] [,2]
#> [1,]    9   11
#> [2,]   10   12
应用(abc,边际=c(1,2),乐趣=平均值)
#>      [,1] [,2]
#> [1,]    5    7
#> [2,]    6    8
由(v0.3.0)于2020年4月14日创建

关于接近TensorFlow中应该是什么样子的猜测:

库(tensorflow)

a您可以使用
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)
a
#>  [[ 5  7]
#>   [ 6  8]]
#> 
#>  [[ 9 11]
#>[10 12]],shape=(3,2,2),dtype=int32)
tf$reduce_平均值(abc,轴=0L)
#>tf张量(
#> [[5 7]
#>[6 8]],shape=(2,2),dtype=int32)

注意:不要忘记将
L
放在轴编号后,将其转换为整数。

这正是我需要的答案,谢谢!我认为
tf.concat()
文档将在tensorflows文档中链接到
tf.stack()
。这超出了这个问题的范围,但是如何为任何东西构造
tf$concat()
调用?@mpettis我不确定我是否正确理解了您的问题!但让我试着澄清一下:您需要传递一个张量列表和一个轴编号,例如
tf$concat(list(a,b,c),axis=0L)
。但是,顾名思义,它将连接给定轴上的给定张量,即在上一个示例中,它将成为形状为
(6,2)
的张量(而不是
tf$stack
生成的形状为
(3,2,2)
的张量)。这和原始答案确实回答了这个问题。我试图找出
tf$concat()
的正确方法签名,因为我得到了一个错误(即使在本例中调用的方法是错误的)。我没有正确解释错误消息。我以为我没有正确地调用带有张量的参数,但错误实际上是因为调用带有
axis=0
的第二个参数,而不是
axis=0L
。这确实解决了问题,谢谢!