from keras.datasets import mnist
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Convolution2D,Activation,MaxPool2D,Flatten,Dense
#下载数据,数据归一化
(x_train,y_train),(x_test,y_test) = mnist.load_data()
x_train = x_train.reshape(x_train.shape[0],1,28,28) / 255#1是通道,黑白照片,28*28维度
x_test = x_test.reshape(x_test.shape[0],1,28,28) / 255
y_train = np_utils.to_categorical(y_train,num_classes=10)#ones-hot
y_test = np_utils.to_categorical(y_test,num_classes=10)
#构建模型
model = Sequential()
#往模型中添加层
model.add(Convolution2D(
batch_input_shape=(None,1,28,28),#第一层需要定义输入维度
filters = 32,#输出的维度,即滤波器的个数
kernel_size= 5,#滤波器的大小
strides= 1,#步长
padding= 'same',padding method
#data_format='channels_first',
))
model.add(Activation('relu'))
model.add(MaxPool2D(
pool_size=2,
strides=2,
padding='same',
))
#(32,1,14,14)
model.add(Convolution2D(
filters=64,
kernel_size=5,
strides=1,
padding = 'same'
))
model.add(Activation('relu'))
model.add(MaxPool2D(
pool_size=2,
strides=2,
padding='same'
))
model.add(Flatten())
model.add(Dense(1024))
model.add(Activation('relu'))
model.add(Dense(10))
model.add(Activation('softmax'))
#激活模型
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
#训练
model.fit(x_train,y_train,batch_size=32,epochs=2)
#测试
loss, accuracy = model.evaluate(x_test,y_test)
print('\nloss:',loss,'\naccuracy:',accuracy)
result:
9984/10000 [============================>.] - ETA: 0s
loss: 0.07367892188186524
accuracy: 0.98
Process finished with exit code 0