TensorFlow(7)卷积神经网络实战(1)(可视化)
目录
基础理论
卷积
卷积核与过滤器的区别
一、获取数据集
二、设定数据集大小、归一化
三、构建卷积神经网络
四、编译&&训练
五、模型评估
六、可视化
1、创建plt图
2、获取各卷积层
3、观察卷积层
总代码
卷积神经网络
可视化
基础理论
在实际应用中,摄像头捕捉到的图片,主物品往往会偏于一侧的位置,甚至有角度的旋转,这时神经网络模型对这些图片的分类就会不准。这时我们引入:卷积神经网络(CNN)。
通过卷积操作缩小了图像的内容,将模型注意力集中在图像特定的、明显的特征上。
这种计算对于计算机视觉来说是非常理想的,因为通常情况下,能够像这样被突出显示的特征才是区分一个物品和另一个物品的关键。
卷积
不同的过滤器有不同的效果:
竖直过滤器(留下竖直线):
水平过滤器(留下水平线):
卷积核与过滤器的区别
卷积核是二维的,滤波器是三维的(高维,也可能是四维的)
- 卷积核就是由长和宽来指定的,是一个二维的概念。
- 而过滤器是是由长、宽和深度指定的,是一个三维的概念。
- 过滤器可以看做是卷积核的集合。
- 过滤器比卷积核高一个维度——深度。
一、获取数据集
# 1、获取数据集
mnist = tf.keras.datasets.fashion_mnist
(training_images, training_labels), (test_images, test_labels) = mnist.load_data()
二、设定数据集大小、归一化
卷积期望一个包含所有数据的单一张量,所以要把训练数据设置为60000x28x28x1的一个4D列表。(如果不这样做,会在训练时得到一个错误,因为卷积操作将不能识别数据形状。)
# 2、设定数据集大小、归一化
training_images=training_images.reshape(60000, 28, 28, 1)
training_images=training_images / 255.0
test_images = test_images.reshape(10000, 28, 28, 1)
test_images=test_images/255.0
三、构建卷积神经网络
# 3、构建卷积神经网络
model = tf.keras.models.Sequential([tf.keras.layers.Conv2D(64, (3,3), activation='relu', input_shape=(28, 28, 1)),
# Conv2D:卷积层 64:卷积过滤器数量 (3,3):卷积核大小tf.keras.layers.MaxPooling2D(2, 2),
# 池化层tf.keras.layers.Conv2D(64, (3,3), activation='relu'),tf.keras.layers.MaxPooling2D(2,2),tf.keras.layers.Flatten(),tf.keras.layers.Dense(128, activation='relu'),tf.keras.layers.Dense(10, activation='softmax')
])
四、编译&&训练
# 4、编译&&训练
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(training_images, training_labels, epochs=5)
# 输出模型各层的影响
model.summary()
五、模型评估
# 5、模型评估
test_loss = model.evaluate(test_images, test_labels)
可以发现卷积神经网络比起前面的DNN神经网络效果好了不少,但是相应的,时间会比较慢。
六、可视化
1、创建plt图
import matplotlib.pyplot as plt# plt图
f, a = plt.subplots(3, 4)
# f:子图像 a:array列表 3:行 4:列
2、获取各卷积层
# 各卷积层
from tensorflow.keras import models
layer_outputs = [layer.output for layer in model.layers]
print(layer_outputs)
activation_model = tf.keras.models.Model(inputs = model.input, outputs = layer_outputs)
# 输入层 输出层
3、观察卷积层
# 抽3个图片(FIRST、SECOND、THIRD),观察神经网络的前四层(正好对应四个卷积层)(神经网络共7层)
# test_images[...]:第几张图片 x:第几层
# 第一张图片卷积神经网络处理情况f1 = activation_model.predict(test_images[FIRST_IMAGE].reshape(1, 28, 28, 1))[x]a[0,x].imshow(f1[0, : , :, 1]) #1:下标为1的卷积核(第2个卷积核)
# 第二张图片卷积神经网络处理情况f2 = activation_model.predict(test_images[SECOND_IMAGE].reshape(1, 28, 28, 1))[x] a[1,x].imshow(f2[0, : , :, 1])
# 第三张图片卷积神经网络处理情况f3 = activation_model.predict(test_images[THIRD_IMAGE].reshape(1, 28, 28, 1))[x]a[2,x].imshow(f3[0, : , :, 1])
总代码
卷积神经网络
import tensorflow as tf
print(tf.__version__)# 1、获取数据集
mnist = tf.keras.datasets.fashion_mnist
(training_images, training_labels), (test_images, test_labels) = mnist.load_data()
# 特征训练集 目标训练集 特征测试集 目标测试集# 2、设定数据集大小、归一化
training_images=training_images.reshape(60000, 28, 28, 1)
training_images=training_images / 255.0
test_images = test_images.reshape(10000, 28, 28, 1)
test_images=test_images/255.0# 3、构建卷积神经网络
model = tf.keras.models.Sequential([tf.keras.layers.Conv2D(64, (3,3), activation='relu', input_shape=(28, 28, 1)),
# Conv2D:卷积层 64:卷积过滤器数量 (3,3):卷积核大小tf.keras.layers.MaxPooling2D(2, 2),
# 池化层tf.keras.layers.Conv2D(64, (3,3), activation='relu'),tf.keras.layers.MaxPooling2D(2,2),tf.keras.layers.Flatten(),tf.keras.layers.Dense(128, activation='relu'),tf.keras.layers.Dense(10, activation='softmax')
])# 4、编译&&运行
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(training_images, training_labels, epochs=5)
# 输出模型各层的影响
model.summary()# 5、模型评估
test_loss = model.evaluate(test_images, test_labels)
可视化
# 卷积、池化过程可视化
import matplotlib.pyplot as plt# plt图
f, a = plt.subplots(3, 4)
# f:子图像 a:array列表 3:行 4:列# 随机选取可视化的图片
FIRST_IMAGE=0
SECOND_IMAGE=7
THIRD_IMAGE=26# 各卷积层
from tensorflow.keras import models
layer_outputs = [layer.output for layer in model.layers]
print(layer_outputs)
activation_model = tf.keras.models.Model(inputs = model.input, outputs = layer_outputs)
# 输入层 输出层# 按行可视化
for x in range(0,4):
# 观察卷积层(7个层输出,这里只取了四个卷积层)f = activation_model.predict(test_images[0].reshape(1, 28, 28, 1))print(len(f))# 抽3个图片(FIRST、SECOND、THIRD),观察神经网络的前四层(正好对应四个卷积层)(神经网络共7层)
# test_images[...]:第几张图片 x:第几层
# 第一张图片卷积神经网络处理情况f1 = activation_model.predict(test_images[FIRST_IMAGE].reshape(1, 28, 28, 1))[x]a[0,x].imshow(f1[0, : , :, 1]) #1:下标为1的卷积核(第2个卷积核)
# 第二张图片卷积神经网络处理情况f2 = activation_model.predict(test_images[SECOND_IMAGE].reshape(1, 28, 28, 1))[x] a[1,x].imshow(f2[0, : , :, 1])
# 第三张图片卷积神经网络处理情况f3 = activation_model.predict(test_images[THIRD_IMAGE].reshape(1, 28, 28, 1))[x]a[2,x].imshow(f3[0, : , :, 1])
TensorFlow(7)卷积神经网络实战(1)(可视化)相关推荐
- tensorflow卷积神经网络实战:Fashion Mnist 图像分类与人马分类
卷积神经网络实战:Fashion Mnist 图像分类与人马分类 一.FashionMnist的卷积神经网络模型 1.卷积VS全连接 2.卷积网络结构 3.卷积模型结构 1)Output Shape ...
- 从零开始用TensorFlow搭建卷积神经网络
https://www.jiqizhixin.com/articles/2017-08-29-14 机器之心GitHub项目:从零开始用TensorFlow搭建卷积神经网络 By 蒋思源2017 ...
- TensorFlow CNN卷积神经网络实现工况图分类识别(一)
1. Tensorflow知识点 1.1. 张量 在Tensorflow程序中,所有的数据都是通过张量的形式来表示.从功能的角度上看,张量可以简单的理解为多维数组. (1)占位符Placeholder ...
- 【深度学习】Tensorflow搭建卷积神经网络实现情绪识别
[深度学习]Tensorflow搭建卷积神经网络实现情绪识别 文章目录 1 Tensorflow的基本使用方法1.1 计算图1.2 Feed1.3 Fetch1.4 其他解释 2 训练一个Tensor ...
- TF之CNN:Tensorflow构建卷积神经网络CNN的简介、使用方法、应用之详细攻略
TF之CNN:Tensorflow构建卷积神经网络CNN的简介.使用方法.应用之详细攻略 目录 TensorFlow 中的卷积有关函数入门 1.tf.nn.conv2d函数 案例应用 1.TF之CNN ...
- 【Pytorch神经网络理论篇】 13 深层卷积神经网络介绍+池化操作+深层卷积神经网络实战
1 深层卷积神经网络概述 1.1 深层卷积神经网络模型结构图 1.1.1 深层卷积神经网络的正向结构构成剖析 输入层,将每个像素作为一个特征节点输入网络. 卷积层:由多个滤波器组合而成. 池化层:将卷 ...
- 04.卷积神经网络 W1.卷积神经网络(作业:手动/TensorFlow 实现卷积神经网络)
文章目录 作业1:实现卷积神经网络 1. 导入一些包 2. 模型框架 3. 卷积神经网络 3.1 Zero-Padding 3.2 单步卷积 3.3 卷积神经网络 - 前向传播 4. 池化层 5. 卷 ...
- 基于tensorflow和卷积神经网络的电影推荐系统的实现
基于tensorflow和卷积神经网络的电影推荐系统的实现 一. 数据处理 1. MovieLens数据集 2. 处理后的数据 二. 建模&训练 1. 嵌入层 2. 文本卷积层 3. 全连接层 ...
- 卷积神经网络实战一 水果分类
主要环境配置 win10,pycharm Python3.6 keras2.2.0 numpy1.16.0 pillow8.1.1 scipy1.5.4 tensorflow-gpu1.11.0 先使 ...
最新文章
- muduo之channel
- 信息系统项目管理师-风险管理知识点
- Scala代码案例:求ax2+bx+c=0方程的根
- linux 进程通信 pipe
- 【MyBatis框架】查询缓存-一级缓存原理
- 服务器获取用户信息失败是什么原因,花粉俱乐部获取用户信息失败怎么解决?花粉俱乐部登录失败是什么原因?[多图]...
- 各国货币代码表(Currency Code)
- HTML期末网页设计——设计报告
- android hci设备,Android Bluetooth hci 命令分析
- html将图片转为圆形并居中
- 笔记本cpu温度多少正常?温度过高的4个常见原因
- ansible中的加密
- Simulink仿真WiFi信号
- 《Effective C++》笔记
- 基于Matlab模拟AWGN 信道上 OFDM附完整代码
- 7 netsnmp安装window_NET SNMP|NET-SNMP windows版下载 v5.6.1.1 32位版 - 121下载站
- c语言输入10个评委分数,vb输入10个评委给的分数,去掉最高分和最低分
- 神经网络中的阈值是什么
- 【转载】androidstudo如何跨越这个厚厚的墙,亲测有效 Could not resolve com.android.tools.build:gradle:
- 直流无刷电机FOC控制算法 理论到实践 —— 理论(二)