Extracting last layers of keras model as a submodel

前端 未结 3 1403
不知归路
不知归路 2021-02-06 08:37

Say we have a convolutional neural network M. I can extract features from images by using

extractor = Model(M.inputs, M.get_layer(\'last_conv\').output)
feat         


        
3条回答
  •  灰色年华
    2021-02-06 09:42

    Every layer in the model is indexed. So if you know which layers you need, you could loop through them, copying them into a new model. This operation should copy the weights inside the layer as well.

    Here's a model (from Oli Blum's answer):

      model = Sequential()
      # add some layers
      model.add(Conv2D(32, kernel_size=(3, 3),
                     activation='relu',
                     input_shape=(28, 28, 1), name='l_01'))
      model.add(Conv2D(64, (3, 3), activation='relu', name='l_02'))
      model.add(MaxPooling2D(pool_size=(2, 2), name='l_03'))
      model.add(Dropout(0.25, name='l_04'))
      model.add(Flatten(name='l_05'))
      model.add(Dense(128, activation='relu', name='l_06'))
      model.add(Dropout(0.5, name='l_07'))
      model.add(Dense(10, activation='softmax', name='l_08'))
    

    Say you wanted the last three layers:

    def extract_layers(main_model, starting_layer_ix, ending_layer_ix):
      # create an empty model
      new_model = Sequential()
      for ix in range(starting_layer_ix, ending_layer_ix + 1):
        curr_layer = main_model.get_layer(index=ix)
        # copy this layer over to the new model
        new_model.add(curr_layer)
      return new_model
    

提交回复
热议问题