keras 实现神经网络层特征图 可视化(基于retinanet项目)

from keras import backend as K
from keras.models import load_model
from matplotlib import pyplot as plt
import cv2
import numpy as np
from keras_retinanet import models
import math

def main():
    #装载训练好的模型,这里是使用keras_retinanet工程编写的load_model函数,实际上也是调用了keras.models import load_model方法
    model = models.load_model('G:/model/resnet50_csv_03_2019-05-24-1345.h5',backbone_name='resnet50')

    #读取图片
    images=cv2.imread("transformer_97.jpg")
    cv2.imshow("Image", images)


    #扩展图像的维度
    image_arr = np.expand_dims(images, axis=0)

    # 第一个参数,表示模型的输入层,[model.layers[0].input]表示输入数据;
    # 第二个参数,表示模型的输出层,可根据需要提取模型相应的中间层作为输出层,如[model.layers[2].output]表示获取中间层第2层作为输出层
    # 注意,layer_n实际上是一个函数
    layer_n = K.function([model.layers[0].input], [model.layers[200].output])

    #通过输入端输入数据,获取模型的输出结果
    f1 = layer_n([image_arr])[0]

    # 根据模型输出层的特征数,遍历输出层的所有特征图像(通常输出层是多通道的,不能直接显示出来)
    row_col = math.floor(f1.shape[3] ** 0.5)
    for _ in range(row_col*row_col):
        show_img = f1[:, :, :, _]
        print(f1.shape)
        feature_shape=show_img.shape
        #再次调整特征图像的维度,调整为2维特征
        show_img.shape = [feature_shape[1], feature_shape[2]]
        #根据特征数目计算显示的格子个数
        plt.subplot(row_col, row_col, _ + 1)
        #将图像投影到plt画布上
        plt.imshow(show_img)
        #关闭坐标
        plt.axis('off')
    plt.show()

if __name__ == '__main__':
    main()

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值