什么是mnist数据集?
MNIST数据集是格式为(28,28,1)简单服饰鞋数据集。MNIST数据集共有60000张用于训练的数据,对应的有60000个标签。共有10000张用于测试的图片的数据,同样的有10000个标签与之对应。
数据获取与预处理
dataset, metadata = tfds.load('fashion_mnist', as_supervised=True, with_info=True)
dataset, metadata = tfds.load('fashion_mnist', as_supervised=True,with_info=True)
train_dataset, test_dataset = dataset['train'], dataset['test']
class_name = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat', 'Sandal', 'Shirt', 'Sneaker','Bag','Ankleboot']
num_train_example=metadata.splits['train'].num_examples num_test_example=metadata.splits['test'].num_examples
为了方便访问,我们先定义一个函数normalize对数据加进行预处理
将像素点转化为浮点型
images = tf.cast(images, tf.float32)
范围标准化到0-1之间
images /= 255
对测试集和训练集的每一个元素通过map都执行一遍normalize(标准化)函数
train_dataset=train_dataset.map(normalize) test_dataset = test_dataset.map(normalize)
我们将训练集打乱并且和测试集一样以32个样本为一组
train_dataset = train_dataset.repeat().shuffle(num_train_example).batch(32)test_dataset = test_dataset.batch(32)
构建模型
moodel = tf.keras.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28, 1)), tf.keras.layers.Dense(128, activation=tf.nn.relu), tf.keras.layers.Dense(10, activation=tf.nn.softmax)])
扁平化层,将多维数据扁平化
tf.keras.layers.Flatten(input_shape=(28, 28, 1))
密集层, 第一个参数是神经单元数量,后一个是激活函数relu(关于激活函数的具体描述,我会在接下来的文章中介绍) tf.keras.layers.Dense(128, activation=tf.nn.relu),
输出 激活函数使用softMax
tf.keras.layers.Dense(10, activation=tf.nn.softmax)])
模型编译
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy', metrics=['accuracy'])
使用了Adam优化器编译模型,可以不用指定学习率# adam还可以作为优化器的参数,损失函数设为sparse_categorical_crossentropy,该损失函数适用于分类任务场景
我们开始训练,迭代训练5次
model.fit(train_dataset, epochs=5, steps_per_epoch=math.ceil(num_train_example / 32))
