当前位置:   article > 正文

Keras中间层输出的两种方式,及特征图可视化_model.get_layer('model_1')

model.get_layer('model_1')

训练好的模型,想要输入中间层的特征图,有两种方式:

1. 通过model.get_layer的方式。创建新的模型,输出为你要的层的名字。

创建模型,debug状态可以看到模型中,base_model/layers,图中红框即为layer名字,根据你想输出的层填写。最后网络feed数据后,输出的就是中间层结果。

2. 通过建立Keras的函数。

  1. from keras import backend as K
  2. model = load_model('data/checkpoints/inception.026-1.07.hdf5') #replaced by your model name
  3. layer_1 = K.function([model.layers[0].input], [model.layers[1].output])#第一个 model.layers[0],不修改,表示输入数据;第二个model.layers[you wanted],修改为你需要输出的层数的编号
  4. f1 = layer_1([input_image])[0]#只修改inpu_image
  5. #第一层卷积后的特征图展示,输出是(1,149,149,32),(样本个数,特征图尺寸长,特征图尺寸宽,特征图个数)
  6. for _ in range(32):
  7. show_img = f1[:, :, :, _]
  8. show_img.shape = [149, 149]
  9. plt.subplot(4, 8, _ + 1)
  10. plt.imshow(show_img, cmap='gray')
  11. plt.axis('off')
  12. plt.show()

特征图可视化结果:

 

 

附方法二完整代码(本例中训练好的模型和代码的百度网盘地址:链接:https://pan.baidu.com/s/1KdXNNFpsl2TggxNzOMk2dA 密码:8m70)

 

  1. """
  2. Classify a few images through our CNN.
  3. """
  4. import numpy as np
  5. from processor import process_image
  6. from keras.models import load_model
  7. from keras import backend as K
  8. import matplotlib.pyplot as plt
  9. import cv2
  10. def main():
  11. model = load_model('data/checkpoints/inception.026-1.07.hdf5') #replaced by your model name
  12. # Get all our test images.
  13. image='v_ApplyLipstick_g01_c01-0105.jpg'
  14. images=cv2.imread('v_ApplyLipstick_g01_c01-0105.jpg')
  15. cv2.imshow("Image", images)
  16. cv2.waitKey(0)
  17. # Turn the image into an array.
  18. image_arr = process_image(image, (299, 299, 3))# 根据载入的训练好的模型的配置,将图像统一尺寸
  19. image_arr = np.expand_dims(image_arr, axis=0)
  20. # 设置可视化的层
  21. layer_1 = K.function([model.layers[0].input], [model.layers[1].output])
  22. f1 = layer_1([image_arr])[0]
  23. for _ in range(32):
  24. show_img = f1[:, :, :, _]
  25. show_img.shape = [149, 149]
  26. plt.subplot(4, 8, _ + 1)
  27. plt.subplot(4, 8, _ + 1)
  28. plt.imshow(show_img, cmap='gray')
  29. plt.axis('off')
  30. plt.show()
  31. # conv layer: 299
  32. layer_1 = K.function([model.layers[0].input], [model.layers[299].output])
  33. f1 = layer_1([image_arr])[0]
  34. for _ in range(81):
  35. show_img = f1[:, :, :, _]
  36. show_img.shape = [8, 8]
  37. plt.subplot(9, 9, _ + 1)
  38. plt.imshow(show_img, cmap='gray')
  39. plt.axis('off')
  40. plt.show()
  41. print('This is the end !')
  42. if __name__ == '__main__':
  43. main()

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/449721
推荐阅读
相关标签
  

闽ICP备14008679号