TensorFlow2.0入门1-2 卷积神经网络进行手写字分类并可视化隐藏层

卷积神经网络进行手写字分类并进行可视化

内容总结自吴恩达TensorFlow2.0的课程

简单的卷积神经网络的使用

我们使用的数据集还是之前的mnist数据集。

import tensorflow as tf
%matplotlib inline
print(tf.__version__)
# 加载数据集
mnist = tf.keras.datasets.fashion_mnist  
(training_images, training_labels), (test_images, test_labels) = mnist.load_data()
# 对数据集进行标准化,便于之后的使用。
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
# 设定我们的模型。
model = tf.keras.models.Sequential([
  # 卷积层,64通道,大小为3x3激活函数为relue,因为是第一层需要设置输入的数据维度。
  tf.keras.layers.Conv2D(64, (3,3), activation='relu', input_shape=(28, 28, 1)),  
  # 池化层,最大池化
  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')
])
# 使用adam优化,损失函数为交叉熵,优化指标为正确率
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
# 打印模型的具体信息
model.summary()
# 进行训练
model.fit(training_images, training_labels, epochs=5)
# 进行评估
test_loss = model.evaluate(test_images, test_labels)

在这里插入图片描述
在这里插入图片描述

进行卷积层池化层可视化

查看100个测试集的标志,便于我们之后可视化对象的选取。

print(test_labels[:100])

在这里插入图片描述
我们选择了797的数字进行可视化
cmap='inferno’是设定一种颜色的变化
在这里插入图片描述

import matplotlib.pyplot as plt
from tensorflow.keras import models
f, axarr = plt.subplots(3,4)
# 对3个图片进行选择
FIRST_IMAGE=0
SECOND_IMAGE=7
THIRD_IMAGE=26
# 每一层有64个通道,可以在0-63之间进行选择。
CONVOLUTION_NUMBER = 1
# 获取每一层的输出信息
layer_outputs = [layer.output for layer in model.layers]
# 形成预测模型
activation_model = tf.keras.models.Model(inputs = model.input, outputs = layer_outputs)
for x in range(0,4):
  # 利用我们选择的数据输入到我们的预测模型中,再分别选择第x层进行绘图。输入数据形状为数量、长、宽、通道。
  f1 = activation_model.predict(test_images[FIRST_IMAGE].reshape(1, 28, 28, 1))[x]
  # 进行画图
  axarr[0,x].imshow(f1[0, : , :, CONVOLUTION_NUMBER], cmap='inferno')
  # 不显示网格
  axarr[0,x].grid(False)
  f2 = activation_model.predict(test_images[SECOND_IMAGE].reshape(1, 28, 28, 1))[x]
  axarr[1,x].imshow(f2[0, : , :, CONVOLUTION_NUMBER], cmap='inferno')
  axarr[1,x].grid(False)
  f3 = activation_model.predict(test_images[THIRD_IMAGE].reshape(1, 28, 28, 1))[x]
  axarr[2,x].imshow(f3[0, : , :, CONVOLUTION_NUMBER], cmap='inferno')
  axarr[2,x].grid(False)

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值