keras 特征图可视化实例(中间层)
作者:wanbeila 发布时间:2021-12-05 22:54:46
标签:keras,特征图,可视化,中间层
鉴于最近一段时间一直在折腾的CNN网络效果不太理想,主要目标是为了检测出图像中的一些关键点,可以参考人脸的关键点检测算法。
但是由于从数据集的制作是自己完成的,所以数据集质量可能有待商榷,训练效果不好的原因可能也是因为数据集没有制作好(标点实在是太累了)。
于是想看看自己做的数据集在进入到网络后那些中间的隐藏层到底发生了哪些变化。
今天主要是用已经训练好的mnist模型来提前测试一下,这里的mnist模型的准确度已经达到了98%左右。
使用的比较简单的一个模型:
def simple_cnn():
input_data = Input(shape=(28, 28, 1))
x = Conv2D(64, kernel_size=3, padding='same', activation='relu', name='conv1')(input_data)
x = MaxPooling2D(pool_size=2, strides=2, name='maxpool1')(x)
x = Conv2D(32, kernel_size=3, padding='same', activation='relu', name='conv2')(x)
x = MaxPooling2D(pool_size=2, strides=2, name='maxpool2')(x)
x = Dropout(0.25)(x)
# 获得最后一层卷积层的输出
# 添加自己的全连接
x = Flatten(name='flatten')(x)
x = Dense(128, activation='relu', name='fc1')(x)
x = Dropout(0.25)(x)
x = Dense(10, activation='softmax', name='fc2')(x)
model = Model(inputs=input_data, outputs=x)
此模型已经训练好了,跑了10个epoch,验证集0.33
这里的效果还是很好的,┓( ´∀` )┏
下面在网上搞了张手写数字
使用网络进行预测,这里就先给出如何可视化第一层的卷积层的输出吧,哇哈哈
代码:
input_data = Input(shape=(28, 28, 1))
x = Conv2D(64, kernel_size=3, padding='same', activation='relu', name='conv1')(input_data)
x = MaxPooling2D(pool_size=2, strides=2, name='maxpool1')(x)
x = Conv2D(32, kernel_size=3, padding='same', activation='relu', name='conv2')(x)
x = MaxPooling2D(pool_size=2, strides=2, name='maxpool2')(x)
x = Dropout(0.25)(x)
x = Flatten(name='flatten')(x)
x = Dense(128, activation='relu', name='fc1')(x)
x = Dropout(0.25)(x)
x = Dense(10, activation='softmax', name='fc2')(x)
model = Model(inputs=input_data, outputs=x)
model.load_weights('final_model_mnist_2019_1_28.h5')
raw_img = cv2.imread('test.png')
test_img = load_img('test.png', color_mode='grayscale', target_size=(28, 28))
test_img = np.array(test_img)
test_img = np.expand_dims(test_img, axis=0)
test_img = np.expand_dims(test_img, axis=3)
conv1_layer = Model(inputs=input_data, outputs=model.get_layer(index=1).output)
conv1_output = conv1_layer.predict(test_img)
for i in range(64):
show_img = conv1_output[:, :, :, i]
print(show_img.shape)
show_img.shape = [28,28]
cv2.imshow('img', show_img)
cv2.waitKey(0)
核心方法就是通过加载模型后,新建Model,将输出部分换为你想要查看的网络层数即可,当然get_layer()包括了name和index两个参数。最后通过遍历当前卷积层的所有特征映射,将每一个都展示出来。就可以了。
来源:https://blog.csdn.net/wanbeila/article/details/86681424
0
投稿
猜你喜欢
- 1从SQLServer导出数据 执行BCP: bcp "..." queryout "F:\test.txt&
- 1,不带参数的存储过程2,带输入参数的存储过程3,带输入和输出参数的存储过程4,带返回值的存储过程不带参数的存储过程例如,以下存储过程返回E
- 在python 开发web程序时,需要调用第三方的相关接口,在调用时,需要对请求进行签名。需要用到unix时间戳。 在python里,在网上
- 这篇文章主要介绍了Python如何使用函数做字典的值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友
- 前言一般的方法此处也不列举了,还是有很多的,如双层循环判断是否相等,或新建数组比较再push等等,需要注意的是,使用splice方法移除元素
- 本文只有代码,介绍了有关GUI界面的学生信息管理系统的实现。已经过调试没有很大问题。如有错误,还请批评指正。1.导入tkinter模块imp
- 其实golang用一个函数可以构建一个并发队列,现在编写一个灵活可控的队列程序先定义一个工作type Worker struct { &nb
- 本文实例讲述了python字典序问题,分享给大家供大家参考。具体如下:问题描述:将字母从左向右的次序与字母表中的次序相同,且每个字符最大出现
- 1.获取页面titletitle:获取当前页面的标题显示的字段from selenium import webdriverimport ti
- 目录一、前言二、什么是super三、super的常用使用场景总结一、前言最近有粉丝向我咨询super相关的问题,说网上搜索到的教程不够通俗易
- shapefile是GIS中非常重要的一种数据类型,在ArcGIS中被称为要素类(Feature Class),主要包括点(point)、线
- Composer的基本使用在项目中使用composer.json在项目中使用composer,你需要有一个composer.json文件,此
- 在 golang 语言中,实现io的读与写,只要实现了如下的读写接口即可:// go 1.19/src/io/io.go
- 1.参数propsprops是一个对象,包含父组件传递给子组件的所有数据。在子组件中使用props进行接收。包含配置声明并传入的所有的属性的
- mysql优化了所以先说说这个,其实这个,很复杂,对于不同的网站,其在线,访问量,帖子数量,网络情况,以及机器配置都有关系,优化不是一次可以
- 1.0 创建存储过程和函数创建存储过程和函数就是将经常使用的一组 SQL 语句组合在一起,并将这些 SQL 语句当作一个整体存储
- 以下为SQL SERVER7.0以上版本的字段类型说明。SQL SERVER6.5的字段类型说明请参考SQL SERVER提供的说明。bit
- __init__ 方法是什么?使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__ 方法
- 1.函数调用# 1.调用函数,需要知道函数的名称和参数# 2.调用函数传入的参数需要和函数定义的参数数量和类型一致# 如调用abs函数pri
- 一般事件事件浏览器支持描述onClickIE3|N2|O3鼠标点击事件,多用在某个对象控制的范围内的鼠标点击onDblClickIE4|N4