您的位置:首页 > 编程语言

Keras 中间层可视化,附代码详解,以Mnist数字为对象

2019-11-17 11:43 4003 查看

最近搭建了个Resnet50 的神经网络模型,相看一看中间某一层的输出结果,想感性的感受下逐层提取特征的过程,以数字0为对象,对数字0逐层提取特征,话不多说直接上代码,关于如何搭建Resnet,可以参见博主的博客主页,也可以参见网上资料,关于如何搭建资源很丰富,在这里直接导入已经搭建并且 训练好的神经网络模型。

#!/usr/bin/env python 3.6
#_*_coding:utf-8 _*_
#@Time    :2019/11/16 22:42
#@Author  :控制工程小小白
#@FileName: virtual.py

#@Software: PyCharm
from keras.models import load_model
from keras import backend as K
import cv2
import numpy as np
import processor
from matplotlib import pyplot as plt
from Resnet import Resnet50
from keras.models import Model
from keras import backend as K
from keras.layers import Input
model=Resnet50()#导入模型,该模型的搭建代码见博主的下一篇博客
image_path=r'G:\make_Mnist_data\mnist_train\0.jpg'#测试图片保存的路径
image=cv2.imread(image_path)#读取图片

image_arr = cv2.resize(image, (32, 32))# 根据载入的训练好的模型的配置,将图像统一尺寸
print(image_arr.shape)
image_arr = np.expand_dims(image_arr, axis=0)

model.load_weights('./My_keras_Resnet50_weight_Adma.h5') #给Resnet加载已经训练好了的权值文件。
layer_1 = K.function([model.layers[0].input], [model.layers[40].output])#第一个 model.layers[0],不修改,表示输入数据;第二个model.layers[you wanted],修改为你需要输出的层数的编号

print(model.layers[40].output.shape)#输出第40层的形状

#第40层后的特征图展示,输出是(?,19,19,512),(样本个数,特征图尺寸长,特征图尺寸宽,特征图个数)

plt.subplots_adjust(left=None, bottom=None, right=None, top=None,
wspace=None, hspace=None)#调整图与图之间的间隔
f1 = layer_1([image_arr])[0]#只修改inpu_image
for _ in range(512):#512表示特征图通道数
show_img = f1[:, :, :, _]
show_img.shape = [19, 19]
plt.subplot(32, 16, _ + 1)#将特征图显示为32行16列
plt.subplot(32, 16, _ + 1)
plt.imshow(show_img, cmap='gray')
plt.axis('off')
plt.show()

此图即是提取中间层的结果。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: