1 2 3 4 5
| import numpy as np import matplotlib.pyplot as plt import keras from keras import layers from keras.datasets import mnist
|
1. 准备数据:X, y
1 2
| (X_train,y_train),(X_test,y_test) = mnist.load_data()
|
1
| X_train.shape,y_train.shape,X_test.shape,y_test.shape
|
((60000, 28, 28), (60000,), (10000, 28, 28), (10000,))
1 2 3
| plt.imshow(X_train[0]) y_train[0]
|
5

Step1准备数据
1 2 3 4
| X_train_shape = X_train.reshape(60000,28*28)/255 X_test_shape = X_test.reshape(10000,28*28)/255 X_train_shape.shape
|
(60000, 784)
1 2 3 4 5
| from keras.utils.np_utils import to_categorical y_train_cat = to_categorical(y_train) y_test_cat = to_categorical(y_test) y_train_cat[1]
|
array([1., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32)
1
| X_train_shape.shape,y_train_cat.shape
|
((60000, 784), (60000, 10))
2. 构建网络模型:
1
| model=keras.Sequential()
|
1
| model.add(layers.Dense(128,input_dim=784,activation='relu'))
|
1
| model.add(layers.Dense(64,activation='relu'))
|
1
| model.add(layers.Dense(10,activation='softmax'))
|
Model: "sequential_2"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_5 (Dense) (None, 128) 100480
dense_6 (Dense) (None, 64) 8256
dense_7 (Dense) (None, 10) 650
=================================================================
Total params: 109,386
Trainable params: 109,386
Non-trainable params: 0
_________________________________________________________________
3. 编译模型:
1
| model.compile(optimizer='Adam',loss='categorical_crossentropy',metrics=['acc'])
|
4. 训练模型:
1
| history = model.fit(X_train_shape,y_train_cat,epochs=10,validation_data=(X_test_shape,y_test_cat))
|
Epoch 1/10
1875/1875 [==============================] - 14s 7ms/step - loss: 0.2399 - acc: 0.9307 - val_loss: 0.1117 - val_acc: 0.9628
Epoch 2/10
1875/1875 [==============================] - 16s 9ms/step - loss: 0.0991 - acc: 0.9694 - val_loss: 0.1036 - val_acc: 0.9685
Epoch 3/10
1875/1875 [==============================] - 20s 11ms/step - loss: 0.0697 - acc: 0.9777 - val_loss: 0.0816 - val_acc: 0.9741
Epoch 4/10
1875/1875 [==============================] - 20s 11ms/step - loss: 0.0515 - acc: 0.9840 - val_loss: 0.0815 - val_acc: 0.9755
Epoch 5/10
1875/1875 [==============================] - 20s 11ms/step - loss: 0.0414 - acc: 0.9865 - val_loss: 0.0821 - val_acc: 0.9764
Epoch 6/10
1875/1875 [==============================] - 12s 7ms/step - loss: 0.0366 - acc: 0.9881 - val_loss: 0.0748 - val_acc: 0.9797
Epoch 7/10
1875/1875 [==============================] - 11s 6ms/step - loss: 0.0265 - acc: 0.9911 - val_loss: 0.0828 - val_acc: 0.9771
Epoch 8/10
1875/1875 [==============================] - 11s 6ms/step - loss: 0.0218 - acc: 0.9929 - val_loss: 0.0978 - val_acc: 0.9750
Epoch 9/10
1875/1875 [==============================] - 15s 8ms/step - loss: 0.0230 - acc: 0.9925 - val_loss: 0.0801 - val_acc: 0.9793
Epoch 10/10
1875/1875 [==============================] - 15s 8ms/step - loss: 0.0187 - acc: 0.9939 - val_loss: 0.0981 - val_acc: 0.9777
4. 评估模型:
1
| loss,acc = model.evaluate(X_train_shape,y_train_cat)
|
1875/1875 [==============================] - 8s 4ms/step - loss: 0.0149 - acc: 0.9949
1
| loss,acc = model.evaluate(X_test_shape,y_test_cat)
|
313/313 [==============================] - 1s 4ms/step - loss: 0.0981 - acc: 0.9777
5. 预测模型:
1
| pred=model.predict(X_test_shape)
|
(10000, 10)
array([2.6841791e-11, 3.1484275e-12, 2.0740840e-09, 3.1667929e-07,
2.0627146e-12, 2.2692452e-09, 1.0325417e-16, 9.9999952e-01,
1.6174454e-11, 6.6967488e-08], dtype=float32)
2
<matplotlib.image.AxesImage at 0x1c040a730d0>
