mnist手写数据集训练
mnist数据集:
提供了6万张28 * 28像素点的0~9的手写数字图片,用于测试
提供了1万张28 * 28像素点的0~9的手写数字图片,用于测试
导入mnist数据集:
mnist = tf.keras.datasets.mnist
(x_train, t_train), (x_test, y_test) = mnisti.load_data()
作为输入特征,输入神经网络时,将数据拉直成了一维数组:
tf.keras.layers.Flatten()
训练代码如下:
1. 使用顺序搭建
import tensorflow as tf
# 使用pycharm调用mnisi数据集时,会自动下载
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
#对输入特征进行归一化,使原本为0~255的灰度值,变成0~1之间的数字
x_train, x_test = x_train / 255.0, x_test / 255.0
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(), # 拉直为一维数组
tf.keras.layers.Dense(126, activation='relu'), # 定义第一层网络有126个神经元,使用激活函数为relu
tf.keras.layers.Dense(10, activation='softmax') # 定义第二层网络有10个神经元,使输出为符合概率分布。
])
# 定义的神经元个数会对最后输出的正确率有影响
model.compile(optimizer='adam', # 使用adam优化器
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False), # 输出不是直接输出所以为False
metrics=['sparse_categorical_accuracy']) # 数据集中的标签是数值,输出为概率分布。
model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data=(x_test, y_test), validation_freq=1)
model.summary()
2. 使用类搭建
import tensorflow as tf
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras import Model
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
class MnistModel(Model):
def __init__(self):
super(MnistModel, self).__init__()
self.flatten = Flatten()
self.d1 = Dense(126, activation='relu')
self.d2 = Dense(10, activation='softmax')
def call(self, x):
x = self.flatten(x)
x = self.d1(x)
y = self.d2(x)
return y
model = MnistModel()
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
metrics=['sparse_categorical_accuracy'])
model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data=(x_test, y_test), validation_freq=1)
model.summary()
3. 输出结果:
.......
60000/60000 [==============================] - 9s 143us/sample - loss: 0.0454 - sparse_categorical_accuracy: 0.9860 - val_loss: 0.0738 - val_sparse_categorical_accuracy: 0.9776
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
flatten (Flatten) multiple 0
_________________________________________________________________
dense (Dense) multiple 98910
_________________________________________________________________
dense_1 (Dense) multiple 1270
=================================================================
Total params: 100,180
Trainable params: 100,180
Non-trainable params: 0
_________________________________________________________________
Process finished with exit code 0