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