如何知道keras中的特定层索引

Hit*_*esh 3 keras

在我的 keras CNN 模型中,我想知道特定层的层数或索引,例如卷积层的索引。model.summary()将讲述模型的细节并model.layer讲述模型的层次。例如我的模型如下:

model.add(Conv2D(32,(2,2),input_shape=input_shape,activation='linear'))
model.add(BatchNormalization())
model.add(LeakyReLU(alpha=.1))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.1))
model.add(Conv2D(32, (2,2),activation='linear'))
Run Code Online (Sandbox Code Playgroud)

然后在上面的模型 Conv2D 层索引是 0 和 5。这件事我想知道。

sdc*_*cbr 5

每层的索引就是 中该层的索引model.layers。如果您明确想要它,您可以使用字典推导式来创建映射:

{i: v for i, v in enumerate(model.layers)}
Run Code Online (Sandbox Code Playgroud)

给出

{0: <keras.layers.convolutional.Conv2D at 0x7f182bcd1710>,
 1: <keras.layers.normalization.BatchNormalization at 0x7f1840981828>,
 2: <keras.layers.advanced_activations.LeakyReLU at 0x7f184154b5c0>,
 3: <keras.layers.pooling.MaxPooling2D at 0x7f184154be10>,
 4: <keras.layers.core.Dropout at 0x7f184154be80>,
 5: <keras.layers.convolutional.Conv2D at 0x7f18800593c8>}
Run Code Online (Sandbox Code Playgroud)

或者反过来:

{v: i for i, v in enumerate(model.layers)}
Run Code Online (Sandbox Code Playgroud)

给出

{<keras.layers.convolutional.Conv2D at 0x7f182bcd1710>: 0,
 <keras.layers.normalization.BatchNormalization at 0x7f1840981828>: 1,
 <keras.layers.advanced_activations.LeakyReLU at 0x7f184154b5c0>: 2,
 <keras.layers.pooling.MaxPooling2D at 0x7f184154be10>: 3,
 <keras.layers.core.Dropout at 0x7f184154be80>: 4,
 <keras.layers.convolutional.Conv2D at 0x7f18800593c8>: 5}
Run Code Online (Sandbox Code Playgroud)

如果您为图层指定明确的名称,可能会更有用:

model = Sequential()
model.add(Conv2D(32,(2,2),input_shape=(32,32,3),activation='linear', name='one'))
model.add(BatchNormalization(name='second'))
model.add(LeakyReLU(alpha=.1, name='third'))
model.add(MaxPooling2D(pool_size=(2, 2), name='four'))
model.add(Dropout(0.1, name='five'))
model.add(Conv2D(32, (2,2),activation='linear', name='six'))
dictionary = {v.name: i for i, v in enumerate(model.layers)}
Run Code Online (Sandbox Code Playgroud)

给出

{'one': 0, 'second': 1, 'third': 2, 'four': 3, 'five': 4, 'six': 5}
Run Code Online (Sandbox Code Playgroud)

您可以使用它按名称查找图层的索引。