导入所需要的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