TypeError:使用 tf.map_fn 和 keras 函数模型时,无法为 <KerasTensor 构建 TypeSpec



当我尝试使用tf。在keras函数模型的定义中的map_fn中,我得到错误:

TypeError: Could not build a TypeSpec for <KerasTensor: ...

。这个简单的模型会在tf-nightly 2.5.0中触发这个错误:

import tensorflow as tf
from tensorflow.keras.layers import Input
from tensorflow.keras.models import Model
x = Input(shape=(10,))
y = tf.map_fn(lambda x : x * 2, x, fn_output_signature=tf.float32)
model = Model(inputs=x, outputs=y)

而替换对tf的调用。Map_fn to调用其他tensorflow操作可以正常工作。

这似乎是由tf引起的。当输入是keras符号输入时,map_fn无法确定输入张量的TypeSpec。

现在我已经遇到了几次tensorflow操作和Keras符号输入张量的问题。将有问题的代码包装在自定义层中似乎通常可以修复它。

例如,用下面的代码替换上面的代码将会成功执行:

import tensorflow as tf
from tensorflow.keras.layers import Input, Layer
from tensorflow.keras.models import Model
x = Input(shape=(10,))
class MapLayer(Layer):
def call(self, input):
return tf.map_fn(lambda x : x * 2, input, fn_output_signature=tf.float32)
y = MapLayer()(x)
model = Model(inputs=x, outputs=y)

为什么不使用tf.keras.layers.Lambda层呢?

import tensorflow as tf
from tensorflow.keras.layers import Input
from tensorflow.keras.models import Model
x = Input(shape=(10,))
y = tf.keras.layers.Lambda(lambda x : x * 2)(x)
model = Model(inputs=x, outputs=y)

相关内容

  • 没有找到相关文章

最新更新