tensorflow map_fn on signle value Tensor

时间:2018-05-21 10:58:49

标签: python-3.x tensorflow

是否可以在具有单个值的张量上运行map_fn?

以下作品:

import tensorflow as tf
a = tf.constant(1.0, shape=[3])
tf.map_fn(lambda x: x+1, a)
#output: [2.0, 2.0, 2.0]

然而,这不是:

import tensorflow as tf
b = tf.constant(1.0)
tf.map_fn(lambda x: x+1, b)
#expected output: 2.0
  • 有可能吗?
  • 我做错了什么?

任何提示将不胜感激!

2 个答案:

答案 0 :(得分:2)

不,这是不可能的。正如您可能看到的那样会引发错误:

ValueError: elems must be a 1+ dimensional Tensor, not a scalar

map_fn的要点是将一个函数应用于张量的每个元素,因此将它用于标量(单元素)张量是没有意义的。

关于“你做错了什么”:如果不知道你想要实现什么,这很难说。

答案 1 :(得分:1)

好吧,我看到你接受了一个答案,它正确地指出tf.map_fn()正在将一个函数应用于张量元素,而标量张量没有元素。但是对于标量张量来说,这不是不可能,你只需要tf.reshape()之前和之后,就像这段代码(测试过)一样:

import tensorflow as tf
b = tf.constant(1.0)

if () == b.get_shape():
    c = tf.reshape( tf.map_fn(lambda x: x+1, tf.reshape( b, ( 1, ) ) ), () ) 
else:
    c = tf.map_fn(lambda x: x+1, b)
#expected output: 2.0
with tf.Session() as sess:
    print( sess.run( c ) )

将输出:

  

2.0

根据需要。

通过这种方式,您可以将其纳入一个不可知的函数,该函数可以将标量和非标量张量作为参数。