Tensorflow 我可以将tf.map_fn(…)应用于多个输入/输出吗?

Tensorflow 我可以将tf.map_fn(…)应用于多个输入/输出吗?,tensorflow,Tensorflow,我想使用tf.map\u fn将a函数应用于上述输入、a和b。它将同时输入[1,2,3]和True,并输出类似的值 假设out函数就是一个恒等式:lambda(x,y):x,y因此,如果输入[1,2,3],True,它将输出那些相同的张量 我知道如何对一个变量使用tf.map\u fn(…),但不能对两个变量使用。在这种情况下,我有混合的数据类型(int32和bool),所以我不能简单地连接张量,并在调用后拆分它们 我能用不同数据类型的多个输入/输出使用tf.map\u fn(…)吗?解决了这个

我想使用
tf.map\u fn
将a函数应用于上述输入、
a
b
。它将同时输入
[1,2,3]
True
,并输出类似的值

假设out函数就是一个恒等式:
lambda(x,y):x,y
因此,如果输入
[1,2,3],True
,它将输出那些相同的张量

我知道如何对一个变量使用
tf.map\u fn(…)
,但不能对两个变量使用。在这种情况下,我有混合的数据类型(int32和bool),所以我不能简单地连接张量,并在调用后拆分它们


我能用不同数据类型的多个输入/输出使用
tf.map\u fn(…)
吗?

解决了这个问题。您必须在
dtype
中为每个不同的张量定义每个张量的数据类型,然后您可以将张量作为元组传递,map函数接收一个输入元组,并且
map\u fn
返回一个元组

有效的示例:

a = tf.constant([[1,2,3],[4,5,6]])
b = tf.constant([True, False], dtype=tf.bool)

a.eval()
array([[1, 2, 3],
       [4, 5, 6]], dtype=int32)
b.eval()
array([ True, False], dtype=bool)

请注意,如果使用此选项,处理将在CPU中完成,而不是在GPU上完成。在GPU上进行训练时,这对速度尤其有害。您如何知道此特定功能使用CPU而不是GPU?这是由于函数tf.map_fn本身还是由于数据类型规范?几年后再次讨论这个问题,我不太确定这个评论。如果lambda只返回TF ops,我不确定它们是否会落到CPU上,也不确定从那时到现在TF中是否有任何变化。如果有人想通过跟踪或转储张量所连接的设备来确认,这将非常有用。似乎如果
fn
仅返回TF ops,则这些操作应在默认设备上运行。
a = tf.constant([[1,2,3],[4,5,6]])
b = tf.constant([True, False], dtype=tf.bool)

c = tf.map_fn(lambda x: (x[0], x[1]), (a,b), dtype=(tf.int32, tf.bool))

c[0].eval()
array([[1, 2, 3],
       [4, 5, 6]], dtype=int32)
c[1].eval()
array([ True, False], dtype=bool)