一、步骤:
导入模块以及读取数据
数据预处理
构建模型
编译模型
训练模型
测试
二、代码:
导入模块以及读取数据
#导包
import numpy as np
np.random.seed(1337)
# from keras.datasets import mnist
from keras.utils import np_utils # 主要采用这个模块下的to_categorical函数,将该函数转成one_hot向量
from keras.models import Sequential #keras的模型模块
from keras.layers import Dense , Activation , Convolution2D, MaxPooling2D, Flatten #keras的层模块
from keras.optimizers import Adam #keras的优化器 #读取数据,因为本地已经下载好数据在绝对路径:E:\jupyter\TensorFlow\MNIST_data下,直接采用TensorFlow来读取
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('E:\jupyter\TensorFlow\MNIST_data',one_hot = True) X_train = mnist.train.images
Y_train = mnist.train.labels
X_test = mnist.test.images
Y_test = mnist.test.labels
2、数据预处理
x原本的shape为(55000,784),55000表示样本数量,784表示一个图像样本拉成一个向量的大小,故要将其转成28*28这种长×宽的形式。(-1,1,28,28)中的-1是之后batch_size的大小,即一次取batch大小的样本来训练,1,28,28表示高为1,长为28,宽为28。
#数据预处理
X_train = X_train.reshape(-1,1,28,28)
X_test = X_test.reshape(-1,1,28,28)
y_train = np_utils.to_categorical(Y_train,num_classes = 10)#to_categorical将标签转化成ont-hot
y_test = np_utils.to_categorical(Y_test,num_classes = 10)
3、构建模型
2个卷积层【包括卷积+激活relu+最大池化】+2个全连接层
#模型构建
model = Sequential() #建立一个序列模型 #在这个模型首层添加一个卷积层,一个卷积过滤器大小为5*5,32个过滤器,采用的padding模式是same,即通过补0使输入输出大小一下。首层要加一个输入大小(1,28,28)
model.add(Convolution2D(
nb_filter = 32,
nb_row = 5,
nb_col = 5,
border_mode = 'same',
input_shape = (1,28,28)
)) #接着加一个激活层
model.add(Activation('relu')) #接着加一个最大池化层,pool大小为(2,2),strides步长长移动2,宽移动2。padding采用same模式
model.add(MaxPooling2D(
pool_size = (2,2),
strides = (2,2),
border_mode = 'same',
)) #卷积层2
model.add(Convolution2D(64,5,5,border_mode = 'same')) #激活层2
model.add(Activation('relu')) #池化层2
model.add(MaxPooling2D(pool_size = (2,2),border_mode = 'same')) #进行全连接之前将矩阵展开成一个长向量
model.add(Flatten()) #全连接层1,大小有1024个参数
model.add(Dense(1024)) #激活层
model.add(Activation('relu')) #全连接层2,大小为10
model.add(Dense(10)) #输出层加一个softmax处理
model.add(Activation('softmax'))
4、编译模型:model.compile
采用model.compile来编译,函数内参数说明优化器optimizer、损失函数loss、评价标准metrics。
#编译模型
adam = Adam(lr = 1e-4)
model.compile(optimizer=adam,
loss = 'categorical_crossentropy',
metrics = ['accuracy'])
5、训练模型:model.fit
类似sklearn中的形式
model.fit(X_train,Y_train,nb_epoch = 20,batch_size = 32)
6、测试:model.evaluate
输出测试的损失和准确度
loss , acc = model.evaluate(X_test,y_test)