keras卷积神经网络使用例子

第一个例子 识别手写数字
import numpy as np
import pandas as pd
from paint import show_train_history
from paint import plot_image_labels_prediction
from keras.models import Sequential
from keras.layers import Dense,Dropout,Flatten,Conv2D,MaxPooling2D
from keras.utils import np_utils
from keras.datasets import mnist

np.random.seed(10)
# (X_train_image,y_train_label),(X_test_image,y_test_label)=mnist.load_data()
f = np.load('./mnist.npz')
X_train_image,y_train_label = f['x_train'],f['y_train']
X_test_image,y_test_label = f['x_test'],f['y_test']
print('train data  = ',len(X_train_image))
print(' test data = ',len(X_test_image))
# 数据预处理
x_Train4D = X_train_image.reshape(X_train_image.shape[0],28,28,1).astype('float32')
x_Test4D = X_test_image.reshape(X_test_image.shape[0],28,28,1).astype('float32')
# 数据标准化,加快收敛
x_Train4D_normalize = x_Train4D /255
x_Test4D_normalize = x_Test4D / 255
# 对label进行one-hot编码
y_TrainOneHot = np_utils.to_categorical(y_train_label)
y_TestOneHot = np_utils.to_categorical(y_test_label)

model = Sequential()
# 卷积层1,16个滤镜,每个滤镜5x5大小,卷积产生的图像大小不变
model.add(Conv2D(filters=16,kernel_size=(5,5),padding='same',input_shape=(28,28,1)
                 ,activation='relu'))
# 建立池化层
model.add(MaxPooling2D(pool_size=(2,2)))
# 卷积层2
model.add(Conv2D(filters=36,kernel_size=(5,5),padding='same',activation='relu'))
# 建立池化层2,并加入dropout层防止过度拟合
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))
# 建立平坦层,转换为一维向量
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'])
train_history = model.fit(x=x_Train4D_normalize,y=y_TrainOneHot,validation_split=0.2,
          epochs=10,batch_size=300,verbose=2)

show_train_history(train_history,'acc','val_acc')

keras卷积神经网络使用例子_第1张图片

你可能感兴趣的:(深度学习)