以下作品:
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
任何提示将不胜感激!
答案 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
根据需要。
通过这种方式,您可以将其纳入一个不可知的函数,该函数可以将标量和非标量张量作为参数。