Python AttributeError:层没有入站节点-发生在TF>;=2.4但在TF<;2.4?

Python AttributeError:层没有入站节点-发生在TF>;=2.4但在TF<;2.4?,python,tensorflow,keras,tensorflow2.0,Python,Tensorflow,Keras,Tensorflow2.0,下面是代码的简化示例: 类别MyCustomLayer(keras.layers.Layer): def_uuinit_uu(self,num_filters=64,kernel_size=3): keras.layers.Layer.\uuuuu初始化\uuuuuuuu(自) self.conv_1=keras.layers.Conv2D(filters=num_filters, 内核大小=内核大小) def呼叫(自我,输入): 返回自转换1(输入) x=keras.Input(形状=(无,无

下面是代码的简化示例:

类别MyCustomLayer(keras.layers.Layer):
def_uuinit_uu(self,num_filters=64,kernel_size=3):
keras.layers.Layer.\uuuuu初始化\uuuuuuuu(自)
self.conv_1=keras.layers.Conv2D(filters=num_filters,
内核大小=内核大小)
def呼叫(自我,输入):
返回自转换1(输入)
x=keras.Input(形状=(无,无,3))
my_custom_layer=MyCustomLayer()
y=我的自定义图层(x)
以下线路工程:

my_custom_layer.output
# Out: <KerasTensor: shape=(None, None, None, 64) dtype=float32 (created by layer 'my_custom_layer')>
出现以下错误:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-6-74d9fc3b4fbb> in <module>
----> 1 my_custom_layer.conv_1.output

~/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/base_layer.py in output(self)
   2152     """
   2153     if not self._inbound_nodes:
-> 2154       raise AttributeError('Layer ' + self.name + ' has no inbound nodes.')
   2155     return self._get_node_attribute_at_index(0, 'output_tensors', 'output')
   2156 

AttributeError: Layer conv2d has no inbound nodes.
---------------------------------------------------------------------------
AttributeError回溯(最近一次呼叫上次)
在里面
---->1 my_custom_layer.conv_1.output
输出中的~/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/base\u layer.py(self)
2152     """
2153如果不是自。\u入站\u节点:
->2154 raise AttributeError('层'+self.name+'没有入站节点')
2155返回self.\u在\u索引处获取\u节点\u属性\u(0,'输出\u张量','输出')
2156
AttributeError:层conv2d没有入站节点。
如果我在Tensorflow 2.3.1中运行相同的代码,它将毫无问题地工作。我查看了变更日志,但没有发现什么会破坏它。原因可能是什么



GitHub问题#48196:

我也遇到过类似的问题。现在我也用
tf 2.0
2.1
2.2
2.3
在CPU和GPU模式下测试了你的代码,它正在工作。但它在
tf 2.4
tf 2.6.0-dev20210330
上出现了故障。它看起来像一个bug。使用
tf<2.4
my\u custom\u层.conv\u 1.inbound\u节点
返回

[<tensorflow.python.keras.engine.node.Node at 0x7f751f301bd0>]
[]

tf>=2.4
中的empty
[]
不同,这里有一个临时修复程序使其工作(仅在TF2.4上测试),您可以使用以下命令禁用Kerastenor的使用:

来自tensorflow.python.keras.engine导入keras\u tensor
keras_张量。禁用keras_张量()
#..代码的其余部分
使用您的示例,您可以访问内部组件:

my_custom_layer.conv_1.output
# 

谢谢您的检查!那么,这对我来说不是问题……很高兴知道。我建议在Github上提出一个问题。我已经在进行中!@desa-将此帖子链接到Github问题中(并将此问题链接到此帖子中)会很有帮助,这样其他用户就可以跟踪讨论。此处有一个指向该问题的链接:
[<tensorflow.python.keras.engine.node.Node at 0x7f751f301bd0>]