我在我的简单编码器模型中得到 "Tensor.op is meaningless when eager execution is enabled."。 (TF 2.0)

I'm getting "Tensor.op is meaningless when eager execution is enabled." in my simple encoder model. (TF 2.0)

下面给出了我的编码器模型的代码,我使用函数 API(TF 2.0)

制作了它
embed_obj = EndTokenLayer()
def encoder_model(inp):
  input_1 = embed_obj(inp)
  h = Masking([(lambda x: x*0)(x) for x in range(128)])(input_1)
  lstm1 , state_h, state_c = LSTM(512, return_sequences=True, return_state=True)(h)
  model = Model(inputs=input_1, outputs=[lstm1, state_h, state_c])

  return model

当我打电话给我的模型时:


for x,y in train.take(1):
  k = x
model = encoder_model(k)

我收到以下错误:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-98-46e9c9596137> in <module>()
      2 for x,y in train.take(1):
      3   k = x
----> 4 model = encoder_model(k)

7 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py in op(self)
   1111   def op(self):
   1112     raise AttributeError(
-> 1113         "Tensor.op is meaningless when eager execution is enabled.")
   1114 
   1115   @property

AttributeError: Tensor.op is meaningless when eager execution is enabled.

在 TF2 中,可以使用装饰器构建静态图(防止使用动态图急切执行)。 试试@tf.function装饰器

@tf.function
def encoder_model(inp):
  input_1 = embed_obj(inp)
  h = Masking([(lambda x: x*0)(x) for x in range(128)])(input_1)
  lstm1 , state_h, state_c = LSTM(512, return_sequences=True, return_state=True)(h)
  model = Model(inputs=input_1, outputs=[lstm1, state_h, state_c])

  return model

然后调用函数

for x,y in train.take(1):
  k = x
model = encoder_model(k)