【问题标题】:Extracting activations from a specific layer of neural network从神经网络的特定层中提取激活
【发布时间】:2021-04-27 15:48:30
【问题描述】:

我正在研究图像识别问题。训练模型后,我保存了架构和权重。现在我想使用该模型从其他图像中提取特征并对其执行 SVM。为此,我想删除模型的最后两层,并获得由 CNN 和全连接层计算的值。我如何在 Keras 中做到这一点?

【问题讨论】:

    标签: tensorflow keras deep-learning conv-neural-network feature-extraction


    【解决方案1】:

    如果您的模型是子类 - 只需更改 call() 方法。

    如果没有:

    1. 如果您的模型很复杂 - 用子类模型包装您的模型并在 call() 方法中更改前向传递,或者
    2. 如果您的模型很简单 - 创建没有最后一层的模型,将权重分别加载到每一层

    【讨论】:

      【解决方案2】:
      # a simple model
      model = keras.models.Sequential([
          keras.layers.Input((32,32,3)),
          keras.layers.Conv2D(16, 3, activation='relu'),
          keras.layers.Flatten(),
          keras.layers.Dense(10, activation='softmax')
      ])
      
      # after training
      feature_only_model = keras.models.Model(model.inputs, model.layers[-2].output)
      

      feature_only_model 以 (32,32,3) 为输入,输出为特征向量

      【讨论】:

      • 我应该在这里传递什么 model.inputs ?我不明白。
      • 新模型将有 1 个输入层、1 个 conv 和 1 个 flattn 层。您只需使用与旧模型相同的新模型。
      猜你喜欢
      • 2019-08-02
      • 2020-03-19
      • 1970-01-01
      • 2012-12-14
      • 2023-04-03
      • 2012-07-10
      • 2014-01-18
      • 2017-12-08
      相关资源
      最近更新 更多