1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
from keras.models import Sequential
from keras.layers import Dense,Activation,Dropout,Flatten,MaxPool2D,Convolution2D
import numpy as np
np.random.seed(42)
from keras.utils import np_utils
from keras.optimizers import Adam
import matplotlib.pyplot as plt
%matplotlib inline
# 数据集获取 mnist
data = np.load("./data/mnist.npz")
X_train,y_train,X_test,y_test = data['x_train'],data['y_train'],data['x_test'],data['y_test']
# 注意一下,由于后端是tf,所以维度应该是(width,height,channels)
X_train = X_train.reshape(-1,28,28,1)
X_test = X_test.reshape(-1,28,28,1)
y_train = np_utils.to_categorical(y_train,num_classes=10)
y_test = np_utils.to_categorical(y_test,num_classes=10)
model = Sequential()
# 添加CNN层
# CNN层,filter的个数为32,filter的大小为(5,5),输出尺寸为(28,28.32)
model.add(Convolution2D(filters=32,kernel_size=5,input_shape=(28,28,1)))
model.add(Activation("relu"))
# pool层,采用maxpool,输出尺寸为(14,14,32)
model.add(MaxPool2D(pool_size=(2,2),strides=(2,2),padding="same"))
# CNN层,filter的个数为64,filter的大小为(5,5),输出尺寸为(14,14,64)
model.add(Convolution2D(filters=64,kernel_size=(5,5),padding="same"))
model.add(Activation("relu"))
# pool层,采用maxpool,输出尺寸为(7,7,64)
model.add(MaxPool2D(pool_size=(2,2),strides=(2,2),padding="same"))
# Flatten层,用来接入全连接层,输出尺寸为(64 * 7 * 7)
model.add(Flatten())
# Dense层,输出尺寸为1024
model.add(Dense(1024))
model.add(Activation("relu"))
# Dense输出层.10分类
model.add(Dense(10))
model.add(Activation("softmax"))
adam = Adam(lr = 1e-4)
model.compile(loss = 'categorical_crossentropy',
optimizer=adam,
metrics=['accuracy'])
print(" Training ---------------")
hist = model.fit(X_train,y_train,batch_size=32,epochs=6)
"""
Training ---------------
Epoch 1/6
60000/60000 [==============================] - 15s 249us/step - loss: 0.3424 - acc: 0.9084
Epoch 2/6
60000/60000 [==============================] - 14s 233us/step - loss: 0.1012 - acc: 0.9692
Epoch 3/6
60000/60000 [==============================] - 14s 233us/step - loss: 0.0640 - acc: 0.9794
Epoch 4/6
60000/60000 [==============================] - 14s 228us/step - loss: 0.0452 - acc: 0.9854
Epoch 5/6
60000/60000 [==============================] - 14s 226us/step - loss: 0.0344 - acc: 0.9892
Epoch 6/6
60000/60000 [==============================] - 13s 222us/step - loss: 0.0252 - acc: 0.9920
"""
print(model.summary())
"""
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_14 (Conv2D) (None, 24, 24, 32) 832
_________________________________________________________________
activation_25 (Activation) (None, 24, 24, 32) 0
_________________________________________________________________
max_pooling2d_13 (MaxPooling (None, 12, 12, 32) 0
_________________________________________________________________
conv2d_15 (Conv2D) (None, 12, 12, 64) 51264
_________________________________________________________________
activation_26 (Activation) (None, 12, 12, 64) 0
_________________________________________________________________
max_pooling2d_14 (MaxPooling (None, 6, 6, 64) 0
_________________________________________________________________
flatten_7 (Flatten) (None, 2304) 0
_________________________________________________________________
dense_13 (Dense) (None, 1024) 2360320
_________________________________________________________________
activation_27 (Activation) (None, 1024) 0
_________________________________________________________________
dense_14 (Dense) (None, 10) 10250
_________________________________________________________________
activation_28 (Activation) (None, 10) 0
=================================================================
Total params: 2,422,666
Trainable params: 2,422,666
Non-trainable params: 0
_________________________________________________________________
"""
print("Test -------------")
loss,accuray = model.evaluate(X_test,y_test)
print("loss is :",loss)
print("scores is :",accuray)
# Test -------------
# 10000/10000 [==============================] - 1s 104us/step
# loss is : 0.08235542494400289
# scores is : 0.9787
|