import numpy as np
from keras.datasets import mnist #还是用mnist数据集
from keras.utils import np_utils
from keras.models import Sequential
from keras.optimizers import Adam
from keras.layers import Dense,Activation,Convolution2D,MaxPooling2D,Flatten
#layer多了很多,Flatten是layer形式
#数据生成
(x_train,y_train),(x_test,y_test)=mnist.load_data()
#数据预处理
x_train=x_train.reshape(-1,1,28,28)
#-1代表sample的个数,1是黑白照片高度只有1,长宽都是28
x_test=x_test.reshape(-1,1,28,28)
y_train=np_utils.to_categorical(y_train,num_classes=10)
y_test=np_utils.to_categorical(y_test,num_classes=10)
#建立模型
model=Sequential()
#Cov layer 1 outputshape (32,28,28)
model.add(Convolution2D(nb_filter=32,#滤波器有32个,扫过同一个图片
nb_row=5,#宽度5
nb_col=5,#高度5
border_mode='same', #padding method用same
input_shape=(1,28,28), #长和宽还是28*28
) )
model.add(Activation('relu'))
#pooling layer1 (max pooling) output shape(32,14,14)
model.add(MaxPooling2D(
pool_size=(2,2), #多长多宽的图片
strides=(2,2), #跳两个
border_mode='same', #padding method
))
#Conv layer 2 output shaoe(64,14,14)
model.add(Convolution2D(64,5,5,border_mode='same'))
model.add(Activation('relu'))
#Pooling layer 2 (max pooling) output shape (64,7,7)
model.add(MaxPooling2D(
pool_size=(2,2),
border_mode='same'))
#Fully connected layer1 input shape (64*7*7)=(3136) 进入全连接层,output shaper=1024
model.add(Flatten()) #抹平一维的
model.add(Dense(1024))
model.add(Activation('relu'))
#Fully connnected layer2 to shape(10) for 10 classes
model.add(Dense(10))
model.add(Activation('softmax'))
#用的优化器是adam
adam=Adam(lr=1e-4)
#complie激活模型,几所accuracy和cost
model.compile(optimizer=adam,
loss='categorical_crossentropy',
metrics=['accuracy']
)
print('---------training----------')
#用fit去训练模型
model.fit(x_train,y_train,nb_epoch=1,batch_size=32)
#训练2次,每次放进去32个数据
#测试模型
print('----------Test--------')
loss,accuracy=model.evaluate(x_test,y_test)
print('test loss',loss)
print('test accuracy',accuracy)