keras/构建卷积神经网络识别mnist

来源:互联网 发布:php服务器配置 编辑:程序博客网 时间:2024/05/16 14:07

环境:Keras 2.04, python 2.7,GPU

使用深度学习框架keras,构建卷积神经网络识别手写数字,keras在构建神经网络方面比Tensorflow简单很多,而且Tensorflow也将keras作为其高级api

#coding:utf-8"""python 2.7keras 2.0.4"""from keras.utils import np_utilsfrom keras.models import Sequentialfrom keras.layers import Dense,Activation,Convolution2D,MaxPooling2D,Flattenfrom keras.optimizers import Adamfrom sklearn.metrics import confusion_matrix,classification_reportimport numpy as npimport input_dataimport datetimestart_time = datetime.datetime.now()#设置随机种子np.random.seed(1000)#数据格式转换#one_hot=False这里故意使y值为如下表示:(0000000000),目的是后面使用keras的np_utilsmnist = input_data.read_data_sets('mnist/',one_hot=False)#样本数,颜色通道,28行28列train_data=mnist.train.images.reshape(mnist.train.images.shape[0],1,28,28)#通过keras的np_utils将y值转为如下表示:(0000000000)train_labels = np_utils.to_categorical(mnist.train.labels,nb_classes=10)test_data = mnist.test.images.reshape(mnist.test.images.shape[0],1,28,28)test_labels = np_utils.to_categorical(mnist.test.labels,nb_classes=10)#构建模型model = Sequential()#卷积层,32个卷积核,每个卷积核大小5*5,采用same_padding的方式model.add(Convolution2D(nb_filter=32,nb_row=5,nb_col=5,border_mode='same',input_shape=(1,28,28)))#pooling层,采用same padding model.add(MaxPooling2D(pool_size=(2,2),border_mode='same'))model.add(Convolution2D(nb_filter=64,nb_row=5,nb_col=5,border_mode='same'))model.add(MaxPooling2D(pool_size=(2,2),border_mode='same'))#将数据展平model.add(Flatten())#全连接层model.add(Dense(1024))model.add(Activation('relu'))model.add(Dense(10))model.add(Activation('softmax'))#编译模型sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9,nesterov=True)  model.compile(optimizer=Adam(lr = 0.001),loss='categorical_crossentropy',metrics=['accuracy'])#训练模型#shuffle就是是否把数据随机打乱之后再进行训练  # verbose是屏显进度条   # validation_split就是拿出百分之多少用来做交叉验证  model.fit(train_data,train_labels,nb_epoch=10,batch_size=50,shuffle=True,verbose=1,validation_split=0.3)#测试集结果c,acc = model.evaluate(test_data,test_labels,batch_size=50)#输出预测分类是0,1,2,3,4,5这种类型predictions = model.predict_classes(test_data,batch_size=50)#混淆矩阵print(confusion_matrix(mnist.test.labels,predictions))#reportprint(classification_report(mnist.test.labels,np.array(predictions)))#模型训练了多久end_time = datetime.datetime.now()total_time = (end_time - start_time).secondsprint('total time is:',total_time)

结果:

实验过程是在GPU上测试的,速度比cpu快很多,进行十轮训练用了582s
这里写图片描述

这里写图片描述

阅读全文
0 0
原创粉丝点击