【问题标题】:how to know particular layer index in keras如何知道 keras 中的特定图层索引
【发布时间】:2018-08-13 20:13:40
【问题描述】:

在我的 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'))

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

【问题讨论】:

    标签: keras


    【解决方案1】:

    每一层的索引就是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}
    

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

    【讨论】:

    • 我认为最好给所有的Conv2D层命名,然后在字典的帮助下找到Conv2d层的索引
    猜你喜欢
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    • 2012-06-28
    相关资源
    最近更新 更多