首页 > 代码库 > 利用keras搭建CNN进行mnist数据集分类

利用keras搭建CNN进行mnist数据集分类

   当接触深度学习算法的时候,大家都很想自己亲自实践一下这个算法,但是一想到那些复杂的程序,又感觉心里面很累啊,又要学诸如tensorflow、theano这些框架。那么,有没有什么好东西能够帮助我们快速搭建这个算法呢?当然是有咯!,现如今真不缺少造轮子的大神,so,我强烈向大家推荐keras,Keras是一个高层神经网络API,Keras由纯Python编写而成并基Tensorflow或Theano。Keras为支持快速实验而生,能够把你的idea迅速转换为结果。 具体keras的安装与使用,请参看keras-cn.readthedocs.io/en/latest/ (中文版的哦)。

  anyway ,你经过一丢丢时间了解keras,是不是手有点痒想实践一下呢?好,现在进入主题利用keras搭建cnn进行mnist数据集的分类。

技术分享
CNN

上面这个是CNN比较简单的形式,具体你想搞懂CNN,请参看www.jeyzhang.com/cnn-learning-notes-1.html 。我把文章重点放在程序的讲解上面,好,开始吧!

"keras后端我使用的是tensorflow,该程序运行在64位linux系统“

import numpy as np

from  matplotlib import pyplot as plt

np.random.seed(6) #随机数,这样做的目的是在每次运行程序时,初始值保持一致。seed的值可以随便设置。

import keras

from keras.models import Sequential

from keras.layers import Dense , Dropout ,Activation, Flatten

from keras.layers import Conv2D ,MaxPooling2D   #卷积层,池化层

from keras.utils import np_utils

from keras.datasets import mnist

(X_train,y_train),(X_test,y_test)=mnist.load_data()   #导入mnist数据

X_train = X_train.reshape(X_train.shape[0], 28, 28, 1)

X_test = X_test.reshape(X_test.shape[0], 28, 28, 1)

#这里大家可能不是很了解,主要是为了把mnist数据变成二维图片形式

X_train = X_train.astype(‘float32‘)

X_test = X_test.astype(‘float32‘)

X_train /= 255

X_test /= 255     #做标准化(0,1)之间 ,深度学习对样本值敏感需要做标准化处理

Y_train = np_utils.to_categorical(y_train, 10)

Y_test = np_utils.to_categorical(y_test, 10)

#把标签值变成一维数组显示,例如 标签1 ——0100000000

model = Sequential()

model.add(Conv2D(32, kernel_size=(3, 3),

                   activation=‘relu‘,

                   input_shape=(28,28,1)))

#第一层卷积层,32个特征图,每个特征图中的神经元与输入中的3×3的领域相连。参数可调

model.add(Conv2D(64, (3, 3), activation=‘relu‘))   #第二层卷积层,64个特征图。参数可调

model.add(MaxPooling2D(pool_size=(2, 2)))   #池化层 2×2做映射,参数可调

model.add(Dropout(0.25))   #Dropou算法用于测试集的精确度的优化,这个也可以换。

model.add(Flatten())    #把二维数组拉成一维

model.add(Dense(128, activation=‘relu‘))    #正常的神经网络层

model.add(Dropout(0.5))

model.add(Dense(10, activation=‘softmax‘)) #输出层

model.compile(loss=‘categorical_crossentropy‘,

                         optimizer=‘adam‘,

                          metrics=[‘accuracy‘])   #交叉熵,训练优化算法adam

model.fit(X_train, Y_train, batch_size=32, nb_epoch=10, verbose=1)  # batch=32,epoch=10,参数可调,总迭代次数大家会算吗?

score = model.evaluate(X_test, Y_test, verbose=0)

CNN其实说白了,就是前期的卷积池化处理加后期全连接神经网络,卷积池化就是特征提取过程呗!

程序运行结果 准确率99.2%,当然你们也看到了,有许多参数是可以调整的,so 大家动起来吧。有什么问题可以在@我。

利用keras搭建CNN进行mnist数据集分类