tensorflow—-MNIST手写数字识别问题

mnist数据集简介

在mnist数据集中,每一张图片都是用28*28的矩阵表示,且数字都会出现在图片的正中央,如下展示图片以及矩阵表示:

tensorflow----MNIST手写数字识别问题

MNIST 数据集来自美国国家标准与技术研究所, National Institute of Standards and Technology (NIST). 数据集由来自250 个不同人手写的数字构成, 其中50% 是高中学生, 50% 来自人口普查局(the Census Bureau) 的工作人员

MNIST 数据集可在http://yann.lecun.com/exdb/mnist/获取TensorFlow提供了数据集读取方法(1.x和2.0版本提供的方法不同)

; 数据读取

import tensorflow.compat.v1 as tf
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
print("Tensorflow版本是:",tf.__version__)

tensorflow----MNIST手写数字识别问题
mnist = tf.keras.datasets.mnist
(train_images,train_labels),(test_images,test_labels) = mnist.load_data()

MNIST数据集文件在读取时如果指定目录下不存在,则会自动去下载,需等待一定时间;如果已经存在了,则直接读取。
如果运行时出现网络连接错误,可以从[https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz](https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz)或[https://s3.amazonaws.com/img-datasets/mnist.npz](https://s3.amazonaws.com/img-datasets/mnist.npz)下载MNIST 数据集mnist.npz文件,并放置于用户目录的.keras/dataset 目录下(Windows 下用户目录为C:\Users\用户名,Linux 下用户目录为/home/用户名)

打印图像大小和标签数

print("Train image shape:",train_images.shape,"Train label shape:",train_labels.shape)
print("Test image shape:",test_images.shape,"Test label shape:",test_labels.shape)

tensorflow----MNIST手写数字识别问题

具体看一幅image的数据

print("image data:",train_images[1])

tensorflow----MNIST手写数字识别问题
print("label data:",train_labels[1])

tensorflow----MNIST手写数字识别问题

可视化image

import matplotlib.pyplot as plt
def plot_image(image):
    plt.imshow(image.reshape(28,28),cmap='binary')
    plt.show()
  • plt.imshow()第二个参数是这个图像的模式参数,”binary”表示以灰度模式显示。
  • plt.imshow()函数中的图像数据参数支持一下数据形状:
  • (M,N):二维数值,代表图像大小为M行N列,值为每个像素点的取值。
  • (M,N,3):三维度数值,代表图像大小为M行N列(即图片的高和宽),每个像素点的取值具有RGB三个通道的值(float或uint8)。
  • 参数cmap缺省值为none,将把图像数据映射为彩色图显
plot_image(train_images[1])

tensorflow----MNIST手写数字识别问题
plot_image(train_images[20000])

tensorflow----MNIST手写数字识别问题

reshape()

打印数组
打印数组1-64位,即为0-63数字,数组的下标从0开始

import numpy as np
int_array = np.array([i for i in range(64)])
print(int_array)

tensorflow----MNIST手写数字识别问题
重塑数组
1.重塑成8行8列的数组
int_array.reshape(8,8)

tensorflow----MNIST手写数字识别问题
2.重塑成4行16列的数组
int_array.reshape(4,16)

tensorflow----MNIST手写数字识别问题

独热编码

独热编码示例

x = [3,4]
tf.one_hot(x,depth=10)

tensorflow----MNIST手写数字识别问题
为什么要采用one hot编码
1 将离散特征的取值扩展到了欧式空间,离散特征的某个取值就对应欧式空间的某个点
2 机器学习算法中,特征之间距离的计算或相似度的常用计算方法都是基于欧式空间的
3 将离散型特征使用one-hot编码,会让特征之间的距离计算更加合理
tensorflow----MNIST手写数字识别问题
独热编码如何取值?
对于 一维数组,argmax()返回最大值的 下标(从0开始)
示例:
A = tf.constant([3,20,60,7,6])
print(tf.argmax(A).numpy())

tensorflow----MNIST手写数字识别问题
最大数是60,那60的下标就是2

对于二维数组,如果指定轴参数axis=0,则按(列)索引;如果指定轴参数axis=1,则按(行)索引

B = tf.constant([[3,20,60,7,6],
                [2,11,8,1,87],
                [14,57,33,5,21]])
print(tf.math.argmax(B,axis=0).numpy())
print(tf.math.argmax(B,axis=1).numpy())

tensorflow----MNIST手写数字识别问题
结果解释:[2 2 0 0 1]:按列查找
2:对应第一列中最大数(14)的行号
2:对应第二列中最大数(57)的行号
0:对应第三列中最大数(60)的行号
0:对应第四列中最大数(7)的行号
1:对应第五列中最大数(87)的行号

2:对应第一行中最大数(60)的列号
4:对应第二行中最大数(87)的列号
1:对应第三行中最大数(57)的列号

Original: https://blog.csdn.net/PEABRAIND/article/details/124434298
Author: 独宠。
Title: tensorflow—-MNIST手写数字识别问题

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/521696/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球