直接上代码:
import tensorflow as tf
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(tf.keras.layers.MaxPooling2D((2, 2)))
model.add(tf.keras.layers.Conv2D(64, (3, 3), activation='relu'))
model.add(tf.keras.layers.MaxPooling2D((2, 2)))
model.add(tf.keras.layers.Conv2D(64, (3, 3), activation='relu'))
print(model.summary())
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(64, activation='relu'))
model.add(tf.keras.layers.Dense(10, activation='softmax'))
mnist = tf.keras.datasets.mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
train_images = train_images.reshape((60000, 28, 28, 1))
train_images = train_images.astype('float32') / 255
test_images = test_images.reshape((10000, 28, 28, 1))
test_images = test_images.astype('float32') / 255
train_labels = tf.keras.utils.to_categorical(train_labels)
test_labels = tf.keras.utils.to_categorical(test_labels)
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(train_images, train_labels, epochs=5, batch_size=64)
test_loss, test_acc = model.evaluate(test_images, test_labels)
print(test_acc)
运行结果如下:
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param
=================================================================
conv2d (Conv2D) (None, 26, 26, 32) 320
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 13, 13, 32) 0
_________________________________________________________________
conv2d_1 (Conv2D) (None, 11, 11, 64) 18496
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 5, 5, 64) 0
_________________________________________________________________
conv2d_2 (Conv2D) (None, 3, 3, 64) 36928
=================================================================
Total params: 55,744
Trainable params: 55,744
Non-trainable params: 0
_________________________________________________________________
None
Train on 60000 samples
Epoch 1/5
64/60000 [..............................] - ETA: 16:20 - loss: 2.2890 - accuracy: 0.0781
192/60000 [..............................] - ETA: 5:45 - loss: 2.3111 - accuracy: 0.1406
384/60000 [..............................] - ETA: 3:04 - loss: 2.2594 - accuracy: 0.1771
576/60000 [..............................] - ETA: 2:10 - loss: 2.2011 - accuracy: 0.2344
704/60000 [..............................] - ETA: 1:51 - loss: 2.1641 - accuracy: 0.2656
832/60000 [..............................] - ETA: 1:38 - loss: 2.1092 - accuracy: 0.2969
……
59392/60000 [============================>.] - ETA: 0s - loss: 0.0192 - accuracy: 0.9941
59520/60000 [============================>.] - ETA: 0s - loss: 0.0191 - accuracy: 0.9941
59648/60000 [============================>.] - ETA: 0s - loss: 0.0191 - accuracy: 0.9941
59776/60000 [============================>.] - ETA: 0s - loss: 0.0191 - accuracy: 0.9941
59904/60000 [============================>.] - ETA: 0s - loss: 0.0190 - accuracy: 0.9942
60000/60000 [==============================] - 29s 484us/sample - loss: 0.0191 - accuracy: 0.9941
10000/1 [==============================] - 1s 139us/sample - loss: 0.0170 - accuracy: 0.9910
0.991
Process finished with exit code 0
还有另一种写法:
import tensorflow as tf
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(32, (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.Conv2D(64, (3, 3), activation='relu'),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dense(10, activation='softmax')
])
mnist = tf.keras.datasets.mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
train_images = train_images.reshape((60000, 28, 28, 1))
train_images = train_images.astype('float32') / 255
test_images = test_images.reshape((10000, 28, 28, 1))
test_images = test_images.astype('float32') / 255
train_labels = tf.keras.utils.to_categorical(train_labels)
test_labels = tf.keras.utils.to_categorical(test_labels)
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(train_images, train_labels, epochs=5, batch_size=64)
test_loss, test_acc = model.evaluate(test_images, test_labels)
print(test_acc)