import numpy as np from keras.datasets import mnist from keras.models import Sequential from keras.layers import Conv2D,MaxPooling2D,Dropout,Flatten,Dense (X_train,y_train),(X_test,y_test) = mnist.load_data() #加载数据 X_train = X_train.reshape(X_train.shape[0],28,28,1).astype('float32') X_test = X_test.reshape(X_test.shape[0],28,28,1).astype('float32') X_train/= 255 #由于每个像素是介于0~255的 所以除以255 X_test/=255 def tran_y(y):#手动实现one-hot编码 y_ohe = np.zeros(10) y_ohe[y] = 1 return y_ohe y_train = np.array([ tran_y(y_train[tmp]) for tmp in range(len(y_train)) #实现对label的one-hot编码 ]) y_test = np.array([ tran_y(y_test[i]) for i in range(len(y_test)) ]) #开始搭建卷积神经网络 model = Sequential() #添加一层卷积层,构建64个filter model.add( Conv2D( filters=64, kernel_size=(3,3), strides=(1,1), padding = 'same', input_shape=(28,28,1), activation='relu' ) )#增加一个卷积层,卷积核数为64,大小为3*3,步长为1 model.add(MaxPooling2D(pool_size=(2,2))) #增加一个最大池化层,大小为2*2 model.add(Dropout(0.5)) #设置DropOut层 model.add( Conv2D( filters=256, kernel_size=(3,3), strides=(1,1), padding='same', activation='relu' ) ) model.add(MaxPooling2D(pool_size=(2,2))) model.add(Dropout(0.5)) model.add(Flatten())#把当前层节点展平 model.add(Dense(128,activation='relu')) model.add(Dense(64,activation='relu')) model.add(Dense(32,activation='relu')) model.add(Dense(10,activation='softmax')) #增加全连接层 model.compile(loss = 'categorical_crossentropy',optimizer='adagrad',metrics=['accuracy']) #最后定义损失函数 model.fit(X_train,y_train,validation_data=(X_test,y_test),epochs=20,batch_size=128) #最后放入批量样本,进行训练 scores = model.evaluate(X_test,y_test,verbose=0)
Keras实现手写数字识别
猜你喜欢
转载自blog.csdn.net/wang263334857/article/details/88431119
今日推荐
周排行