我有一个keras张量列表,每提供一个带有name
参数的名称。
例如,我想将BatchNormalization layer
命名为"a"
:
layer = BatchNormalization(axis=3, name="a")(input)
但是当我尝试检索给该级别的名称时,它看起来像这样:
print(layer.name)
>>> a_2/cond/Merge:0
如何检索为layer
对象指定的确切名称(本例为"a"
)?
答案 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