当前位置:   article > 正文

《TensorFlow+Keras深度学习人工智能实践应用》林大贵著第八章代码_tensorflow keras 林大贵

tensorflow keras 林大贵

Keras卷积神经网络识别手写数字

卷积神经网络和多层感知机的差别就在于CNN多了卷积层和池化层,这两个层的层数可以自行设定,

和用多层感知机相比只有建立卷积层那里不同

  1. from keras.datasets import mnist
  2. from keras.utils import np_utils
  3. import numpy as np
  4. np.random.seed(10)
  1. #读取数据
  2. (x_Train,y_Train),(x_Test,y_Test)=mnist.load_data()
  3. #将数字图像特征值转化为4D
  4. x_Train4D=x_Train.reshape(x_Train.shape[0],28,28,1).astype('float32')
  5. x_Test4D=x_Test.reshape(x_Test.shape[0],28,28,1).astype('float32')
  6. #标准化
  7. x_Train4D_normalize=x_Train4D/255
  8. x_Test4D_normalize=x_Test4D/255
  9. #标签的热码转换
  10. y_TrainOneHot=np_utils.to_categorical(y_Train)
  11. y_TestOneHot=np_utils.to_categorical(y_Test)
  1. from keras.models import Sequential
  2. from keras.layers import Dropout,Dense,Flatten,Conv2D,MaxPooling2D #CNN中的层
  3. model=Sequential()
  4. #建立卷积层1
  5. #16个滤镜,每个滤镜(5,5),卷积产生的图像大小不变,单色灰度图
  6. model.add(Conv2D(filters=16,kernel_size=(5,5),padding='same',input_shape=(28,28,1),activation='relu'))
  7. #建立池化层1
  8. model.add(MaxPooling2D(pool_size=(2,2)))
  9. #建立卷积层2
  10. #36个滤镜,每个滤镜(5,5),卷积产生的图像大小不变,单色灰度图
  11. model.add(Conv2D(filters=36,kernel_size=(5,5),padding='same',input_shape=(28,28,1),activation='relu'))
  12. #建立池化层2
  13. model.add(MaxPooling2D(pool_size=(2,2)))
  14. model.add(Dropout(0.25))
  15. #建立平坦层
  16. model.add(Flatten())
  17. #建立隐藏层
  18. model.add(Dense(128,activation='relu'))
  19. model.add(Dropout(0.5))
  20. #建立输出层
  21. model.add(Dense(10,activation='softmax'))#10个神经元,10个数字
  22. print(model.summary())

 

  1. #进行训练
  2. #compile对训练模型进行设置
  3. #loss为交叉熵,adam优化器,metrics模型评估的方式是准确率
  4. model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])
  5. train_history=model.fit(x=x_Train4D_normalize,y=y_TrainOneHot,validation_split=0.2,
  6. epochs=10,batch_size=300,verbose=2)
  1. import matplotlib.pyplot as plt
  2. def show_train_history(train_history,train,validation):
  3. plt.plot(train_history.history[train])
  4. plt.plot(train_history.history[validation])
  5. plt.title('train history')
  6. plt.xlabel('Epoch')
  7. plt.ylabel('train')
  8. plt.legend(['train','validation'],loc='upper left')
  9. plt.show()
  10. show_train_history(train_history,'acc','val_acc')
show_train_history(train_history,'loss','val_loss')

  1. #评估模型准确率
  2. scores=model.evaluate(x_Test4D_normalize,y_TestOneHot)
  3. print('accuracy=',scores[1])
  1. #进行预测
  2. prediction=model.predict_classes(x_Test4D_normalize)
  3. prediction[:10]
  1. def plot_images_labels_prediction(image,labels,prediction,idx,num=10):
  2. #num要显示的数据项数,默认为10,最大25
  3. fig=plt.gcf()
  4. fig.set_size_inches(12,14)
  5. if num>25:num=25
  6. for i in range(0,num):
  7. ax=plt.subplot(5,5,1+i)
  8. ax.imshow(image[idx],cmap='binary')
  9. title="label="+str(labels[idx])
  10. itle='label='+str(labels[idx])
  11. if(len(prediction)>0):
  12. title+=",prediction="+str(prediction[idx])
  13. ax.set_title(title,fontsize=10)
  14. ax.set_xticks([])
  15. ax.set_yticks([])
  16. idx+=1
  17. plt.show()
  18. plot_images_labels_prediction(x_Test,y_Test,prediction,idx=0)
  1. #建立混淆矩阵
  2. import pandas as pd
  3. pd.crosstab(y_Test,prediction,rownames=['label'], colnames=['predict'])

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/79202
推荐阅读
相关标签
  

闽ICP备14008679号