最近我为猫狗分类创建了基本的CNN模型(非常基础)。如何使用keras可视化这些图层的输出?我使用Tensorflow后端进行keras。
答案 0 :(得分:5)
您可以定义一个模型,该模型获取您想要查看的每个图层的输出并进行预测:
假设您拥有完整的模型:
cnnModel = #a model you have defined with layers
假设你想要指数1,5和8层的输出。
使用这些图层的输出,从这个模型创建一个新模型。
from keras.models import Model
desiredLayers = [1,5,8]
desiredOutputs = [cnnModel.layers[i].output for i in desiredLayers]
#alternatively, you can use cnnModel.get_layer('layername').output for that
newModel = Model(cnnModel.inputs, desiredOutputs)
使用此模型进行预测:
print(newModel.predict(inputData))
现在,"可视化"这些结果可能很棘手,因为它们可能比常规图像有更多的通道。
答案 1 :(得分:2)
Keras通过两种方式以简单的技术为CNN中间输出提供可视化显示:
我假设您已经在keras中构建了model= Sequential()
和CNN layer
实现的模型。
首先读取图像并将其重塑为Conv2d()
需要四个尺寸
因此,将输入图像重塑为4D [batch_size,img_height,img_width,number_of_channels]
例如:
import cv2
import numpy as np
img = cv2.imread('resize.png',0)
img = np.reshape(img, (1,800,64,1)) # (n_images, x_shape, y_shape, n_channels)
img.shape # ((1,800,64,1)) consider gray level image
第一种方式:
from keras.models import Model
layer_name = 'Conv1'
intermediate_layer_model = Model(inputs=model.input,
outputs=model.get_layer(layer_name).output)
intermediate_output = intermediate_layer_model.predict(img)
然后使用matplotlib将其绘制为:
import matplotlib.pyplot as plt
import numpy as np ## to reshape
%matplotlib inline
temp = intermediate_output.reshape(800,64,2) # 2 feature
plt.imshow(temp[:,:,2],cmap='gray')
# note that output should be reshape in 3 dimension
您可以使用keras后端创建函数,并将图层级别作为数值传递,如下所示:
from keras import backend as K
# with a Sequential model
get_3rd_layer_output = K.function([model.layers[0].input],
[model.layers[2].output])
layer_output = get_3rd_layer_output([img])[0] ## pass as input image
访问this链接