利用CNN对MNIST数据集识别(keras框架)

1、数据集下载

https://blog.csdn.net/wuzhichenggo/article/details/79332128

2、代码执行

from tensorflow.examples.tutorials.mnist import input_data

#导入数据
dir = r'F:\dataset\mnist'
mnist = input_data.read_data_sets(dir,one_hot=True)

#输出mnist大小
print(mnist.train.images.shape,mnist.train.labels.shape)
print(mnist.test.images.shape,mnist.test.labels.shape)
print(mnist.validation.images.shape,mnist.validation.labels.shape)

#将数据重组变成图像格式输出,图像大小28*28
import numpy as np
train_data = mnist.train.images.reshape(55000,28,28,1)
train_labels = mnist.train.labels
test_data = mnist.test.images.reshape(10000,28,28,1)
test_labels = mnist.test.labels
#validation_data = mnist.validation.images.reshape(5000,28,28,1)
#validation_labels = mnist.validation.labels

#导入keras
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation, Flatten
from keras.layers.advanced_activations import PReLU
from keras.layers.convolutional import Convolution2D, MaxPooling2D
from keras.optimizers import SGD, Adadelta, Adagrad
from keras.utils import np_utils, generic_utils
from six.moves import range

#建立CNN
#生成一个model
model = Sequential()

#第一个卷积层,4个卷积核,每个卷积核大小5*5。1表示输入的图片的通道,灰度图为1通道。
#border_mode可以是valid或者full,具体看这里说明:http://deeplearning.net/software/theano/library/tensor/nnet/conv.html#theano.tensor.nnet.conv.conv2d
#激活函数用relu
#你还可以在model.add(Activation('tanh'))后加上dropout的技巧: model.add(Dropout(0.5))
model.add(Convolution2D(4,5,5,input_shape=(28,28,1)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))

#第二个卷积层,8个卷积核,每个卷积核大小3*3。4表示输入的特征图个数,等于上一层的卷积核个数
#激活函数用relu
#采用maxpooling,poolsize为(2,2)
model.add(Convolution2D(8, 3, 3))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

#第三个卷积层,16个卷积核,每个卷积核大小3*3
#激活函数用tanh
#采用maxpooling,poolsize为(2,2)
model.add(Convolution2D(16, 3, 3))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

#全连接层,先将前一层输出的二维特征图flatten为一维的。
#全连接有128个神经元节点,初始化方式为normal
model.add(Flatten())
model.add(Dense(128))
model.add(Activation('relu'))
model.add(Dropout(0.5))

#最后一层softmax,输出是10个十个类别
model.add(Dense(10))
model.add(Activation('softmax'))

#开始训练模型
#使用SGD+momentum
#model.compile里的参数loss就是损失函数(目标函数)
model.compile(optimizer = 'rmsprop',
              loss='categorical_crossentropy',
              metrics = ['accuracy'])

model.fit(train_data, train_labels,
          nb_epoch=10, batch_size=100,
          validation_data=(test_data, test_labels))

参考:https://blog.csdn.net/shizhengxin123/article/details/72383728

3、结果显示




  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值