【问题标题】:Saving Layer Values of CNN- Keras保存 CNN-Keras 的层值
【发布时间】:2021-05-28 06:28:23
【问题描述】:

我在 Keras 中创建了以下简单的 CNN(借自 DeepLizard 教程)。

model = Sequential([
        Conv2D(filters = 10, kernel_size = (3, 3), activation = 'relu', padding = 'same', input_shape = (320, 320, 3)),
        MaxPool2D(pool_size = (2, 2), strides = 2),
        Conv2D(filters = 10, kernel_size = (3, 3), activation = 'relu', padding = 'same'),
        MaxPool2D(pool_size = (2, 2), strides = 2),
        Flatten(),
        Dense(20, activation = 'softmax'),
        ])

model.summary()

model.compile(optimizer = Adam(lr = 0.0001), loss = 'categorical_crossentropy', metrics =['accuracy'])

model.fit(x = train_batches, validation_data = valid_batches, epochs = 10, verbose = 2)


predictions = model.predict(x = test_batches, verbose = 0)

如您所见,我将模型生成的预测保存到名为“predictions”的数据框中。但我也有兴趣保存每个 MaxPool2D 层、Conv2D 层和 flatten 层的输出。有没有一种方法可以将这些图层的输出也保存到数据框/列表中? Keras 中是否有此功能?

谢谢!

【问题讨论】:

  • 这些层的输出是特征图。那么,你想保存特征图吗?这些可以保存为列表或数组。
  • 是的,我希望为我呈现给模型的每个输入保存特征图。另外,展平层不应该只是一个长度等于展平层大小的单个数组吗?
  • 这能回答你的问题吗? Keras, How to get the output of each layer?

标签: python tensorflow keras conv-neural-network


【解决方案1】:

您可以使用model.get_layer() 函数来提取模型的任何层。在此处访问文档:https://keras.io/api/models/model/#getlayer-method

【讨论】:

    【解决方案2】:

    感谢您的回复。他们把我引向了正确的方向。这是我最终使用的解决方案。我重新创建了模型,但将预测配置为输出所需的层(在本例中为“conv2d”,即第一个卷积层)。这会产生一个 4-D 数组作为输出,其中第 1 维对应于输入,第 2 和第 3 维是滤波器输出特征图的两个维度,第 4 维对应于其中使用的 n 个滤波器层(在这种情况下,第 4 维将是“10”)。我的下一个任务是找到一种方法将 4 维数组拆分为单独的 3 维数组,其中每个新数组对应一个不同的过滤器。在这种情况下,我将寻找 10 个 3 维数组,一个用于第一个卷积层中使用的每个过滤器。

    from keras.models import Model
    
    model = Sequential([
            Conv2D(filters = 10, kernel_size = (3, 3), activation = 'relu', padding = 'same', input_shape = (320, 320, 3)),
            MaxPool2D(pool_size = (2, 2), strides = 2),
            Conv2D(filters = 10, kernel_size = (3, 3), activation = 'relu', padding = 'same'),
            MaxPool2D(pool_size = (2, 2), strides = 2),
            Flatten(),
            Dense(20, activation = 'softmax'),
            ])
    
    layer_name = 'conv2d'
    intermediate_layer_model = Model(inputs=model.input, outputs=model.get_layer(layer_name).output)
    intermediate_output = intermediate_layer_model.predict(valid_batches)
    
    

    【讨论】:

      猜你喜欢
      • 2020-08-25
      • 2021-04-03
      • 1970-01-01
      • 2018-10-16
      • 1970-01-01
      • 1970-01-01
      • 2019-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多