每一层的索引就是model.layers中那个层的索引。如果您明确需要,可以使用 dict 推导式来创建映射:
{i: v for i, v in enumerate(model.layers)}
给予
{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>}
或者反过来:
{v: i for i, v in enumerate(model.layers)}
给予
{<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}
如果你给你的图层明确的名字可能会更有用:
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)}
给予
{'one': 0, 'second': 1, 'third': 2, 'four': 3, 'five': 4, 'six': 5}
您可以使用它来按名称查找层的索引。