导入所需要的lib:
import numpy as np
from keras.datasets import 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,Dropout
np.random.seed(1337) #设置随机种子
(x_train,y_train),(x_test,y_test)=mnist.load_data() #加载数据
#数据预处理
X_train=x_train.reshape(-1,28,28,1) # (n,单色道,28,28)
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)
# 将X_train, X_test的数据格式转为float32
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
# 归一化
X_train /= 255
X_test /= 255
#建模
model =Sequential()
#卷积 1层
model.add(Convolution2D(
filters=32, # 32个滤波器 -》生成 32深度
kernel_size=3, # 滤波器窗口 大小(3,3)
strides=1,
padding='same', # 过滤模式
# activation='relu', # 激活函数 (可以在这里写)
input_shape=(28,28,1), # 输入形状 就是 图片形状
))
model.add(Activation('relu')) #激活函数
#池化 1层
model.add(MaxPooling2D(
pool_size=(2, 2), # 池化扫描 窗口 大小
strides=2, # 扫描窗口 每次 移动的步长 2
padding='same' #默认 是 valid
))
#卷积 2层
model.add(Convolution2D(
filters=64, # 64个滤波器 -》生成 64深度
kernel_size=3, # 滤波器窗口 大小(3,3)
padding='same', # 过滤模式
activation='relu', # 激活函数 (可以在这里写)
))
#池化 2层
model.add(MaxPooling2D(
pool_size=(2, 2), # 池化扫描 窗口 大小
strides=2,
padding='same', #默认 是 valid
))
model.add(Dropout(0.25)) #防止过拟合
#扁平化
model.add(Flatten())
#全连接
model.add(Dense(128))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(10))
model.add(Activation('softmax'))
#自己定义 优化器
adam=Adam(lr=1e-4)
# 输出模型的参数信息
model.summary()
#搭建模型
model.compile(optimizer='Adam',loss='categorical_crossentropy',metrics=['accuracy'])
model.fit(X_train,Y_train,epochs=1,batch_size=32)
#评估
loss,accuracy=model.evaluate(X_test,Y_test)
print(loss)
print(accuracy)
10000/10000 [==============================] - ETA: 0s
0.0454092171811
0.9847