Keras Tensor获得名字

时间:2019-03-28 15:23:35

标签: python machine-learning keras

我有一个keras张量列表,每提供一个带有name参数的名称。
例如,我想将BatchNormalization layer命名为"a"

layer = BatchNormalization(axis=3, name="a")(input)

但是当我尝试检索给该级别的名称时,它看起来像这样:

print(layer.name)
>>> a_2/cond/Merge:0

如何检索为layer对象指定的确切名称(本例为"a")?

3 个答案:

答案 0 :(得分:3)

让我们将此行分为两行:

layer = BatchNormalization(axis=3, name="a")
node = layer(input)

现在,如果您尝试输出

layer.name 

它将是“ a”。

您要执行的操作是输出此batchnorm层的输出张量的名称,该名称基本上是此合并操作产生的张量流张量。

因此,您必须如上所述对图层进行操作或对操作名称进行一些处理,因为操作名称将始终包含图层名称。

答案 1 :(得分:1)

我知道问题已经得到解答,但问题的更新消除了作者指出的问题,因此我还是会为接下来的人们写我的答案。

像OP一样,我创建了一个图层(此处将是一个密集的图层):

>>> l = Dense(20,activation='softmax',name='a')
>>> l.name
a

如果我在同一控制台中重新运行此代码,则会得到相同的结果。 但是,当我运行问题代码时:

>>> l = Dense(20,activation='softmax',name='a')(inputs)
>>> l.name
a/Softmax:0

当我重新运行代码时:

>>> l = Dense(20,activation='softmax',name='a')(inputs)
>>> l.name
a_1/Softmax:0

如果我稍作改动:

>>> l = Dense(20,activation='softmax',name='a')(l)
>>> l.name
a_2/Softmax:0

SO 创建图层时要小心:您正在根据演算创建一个独立的图层或张量(如接受的答案所述)

您可以通过简单的拆分来检索名称。但是仅在您首次实例化网络时使用。如果重新运行(新实例),名称将更改!

答案 2 :(得分:-1)

您可以

[layer.name for layer in model.layers]

这将输出所有图层名称的列表。 或者可以从模型中检索它。

model.get_layer('a').name