博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
keras实现手写体数字识别功能的CNN
阅读量:4281 次
发布时间:2019-05-27

本文共 4254 字,大约阅读时间需要 14 分钟。

win10安装keras参考博文:

  1. 数据为框架自带的数字手写体

    中间的数值为灰度值,注意灰度值和RGB值不是一个概念,灰度值是介于白和黑之间的值,表示范围0-255.可以理解成黑的程度。所以图片只需要一层就OK。
    数据集包含60000张图片,大小均为28x28.
    在这里插入图片描述

  2. 代码如下:

# -*- coding: utf-8 -*-"""Created on Fri Nov  9 15:50:33 2018"""#from __future__ import print_functionimport kerasfrom keras.datasets import mnist    #自带手写数据集from keras.models import Sequential  #序贯模型from keras.layers import Dense    #全连接层from keras.layers import Dropout  #随机失活层from keras.layers import Flatten  #展平层,从卷积层到全连接层必须展平from keras.layers import Conv2D   #二维卷积层,多用于图像from keras.layers import MaxPooling2D  #最大值池化from keras import backend as kbatch_size = 128  #一批训练样本128张图片num_classes = 10  #有10个类别epochs = 12   #一共迭代12轮img_rows, img_cols = 28, 28  #图片宽,高。(x_train, y_train),(x_test, y_test) = mnist.load_data()#后端可以跑在不同的模型上,比如tensorflow, 不同的工具库对数据的组织形式不同。#=======================================================================if k.image_data_format() == 'channels_first':    x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)      #reshape()不明白可以参考博文:https://blog.csdn.net/u010916338/article/details/84066369    x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)    input_shape = (1, img_rows, img_cols)else:    x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)    x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)    input_shape = (img_rows, img_cols, 1)#=================================================================================x_train = x_train.astype('float32')x_test = x_test.astype('float32')x_train /= 255x_test /= 255y_train = keras.utils.to_categorical(y_train, num_classes)y_test = keras.utils.to_categorical(y_test, num_classes)model = Sequential()  #序贯模型,一个架子model.add(Conv2D(32, kernel_size=(3,3), activation='relu',input_shape=input_shape))  #卷积层, 32个神经元, 卷积核3x3model.add(Conv2D(64, (3,3), activation='relu'))  #卷积层, 64个神经元, 卷积核3x3model.add(MaxPooling2D(pool_size=(2, 2))) #池化层model.add(Dropout(0.25))model.add(Flatten())model.add(Dense(128, activation='relu')) #全连接层, 128神经元model.add(Dropout(0.5))model.add(Dense(num_classes, activation='softmax'))#编译,损失函数, 优化函数, 评价标注是准确率model.compile(loss=keras.losses.categorical_crossentropy, optimizer=keras.optimizers.Adadelta(), metrics=['accuracy'])#运行 , verbose步长model.fit(x_train, y_train, batch_size= batch_size, epochs=epochs, verbose=1, validation_data=(x_test, y_test))score = model.evaluate(x_test, y_test, verbose=0)print('Test loss:', score[0])print('Test accuracy:', score[1])stop = time.time()print(str(stop-start) + "秒")
  1. 运行效果
Train on 60000 samples, validate on 10000 samplesEpoch 1/1260000/60000 [==============================] - 87s 1ms/step - loss: 0.2595 - acc: 0.9187 - val_loss: 0.0619 - val_acc: 0.9802Epoch 2/1260000/60000 [==============================] - 82s 1ms/step - loss: 0.0928 - acc: 0.9721 - val_loss: 0.0401 - val_acc: 0.9859Epoch 3/1260000/60000 [==============================] - 80s 1ms/step - loss: 0.0692 - acc: 0.9795 - val_loss: 0.0336 - val_acc: 0.9883Epoch 4/1260000/60000 [==============================] - 81s 1ms/step - loss: 0.0550 - acc: 0.9840 - val_loss: 0.0325 - val_acc: 0.9886Epoch 5/1260000/60000 [==============================] - 82s 1ms/step - loss: 0.0475 - acc: 0.9854 - val_loss: 0.0336 - val_acc: 0.9877Epoch 6/1260000/60000 [==============================] - 82s 1ms/step - loss: 0.0434 - acc: 0.9870 - val_loss: 0.0292 - val_acc: 0.9902Epoch 7/1260000/60000 [==============================] - 86s 1ms/step - loss: 0.0382 - acc: 0.9889 - val_loss: 0.0272 - val_acc: 0.9906Epoch 8/1260000/60000 [==============================] - 86s 1ms/step - loss: 0.0346 - acc: 0.9896 - val_loss: 0.0257 - val_acc: 0.9916Epoch 9/1260000/60000 [==============================] - 85s 1ms/step - loss: 0.0310 - acc: 0.9905 - val_loss: 0.0283 - val_acc: 0.9917Epoch 10/1260000/60000 [==============================] - 88s 1ms/step - loss: 0.0307 - acc: 0.9905 - val_loss: 0.0277 - val_acc: 0.9906Epoch 11/1260000/60000 [==============================] - 86s 1ms/step - loss: 0.0276 - acc: 0.9917 - val_loss: 0.0253 - val_acc: 0.9919Epoch 12/1260000/60000 [==============================] - 81s 1ms/step - loss: 0.0272 - acc: 0.9921 - val_loss: 0.0266 - val_acc: 0.9919Test loss: 0.026634473627798978Test accuracy: 0.99191011.8610150814056秒
你可能感兴趣的文章
Git学习笔记
查看>>
树模型-决策树
查看>>
【Cubietruck】cubietruck基于Xwindows的qt安装
查看>>
【WinCE】WinCE6.0开发环境搭建
查看>>
【PIC32MZ】I2C通信
查看>>
Maven项目报错:Cannot access nexus-aliyun (http://maven.aliyun.com/nexus/content/...) in offline mode
查看>>
(转)mysql常用的索引种类
查看>>
CDH 删除文件报错:org.apache.hadoop.security.AccessControlException: Permission denied
查看>>
Mysql数据库连接池:C3P0和DRUID实例
查看>>
nginx(4):nginx负载均衡
查看>>
Idea技巧:快速定位某个类的文件在哪个包下面
查看>>
Hbase建表报错:java.io.IOException: Failed to get result within timeout
查看>>
Hadoop远程调试删除文件报错:org.apache.hadoop.security.AccessControlException: Permission denied: user=
查看>>
(转)@Override is not allowed when implementing interface method
查看>>
kafka消费者报错:Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper].
查看>>
(转)Spark与Hadoop的shuffle的异同
查看>>
(转)Redis 持久化之RDB和AOF
查看>>
Redis创建集群报错:[ERR] Sorry, can't connect to node 192.168.0.9:6380
查看>>
Redis(4):集群搭建和java连接
查看>>
pom报错:Element' dependency' cannot have character [ children], because the type's content type is e
查看>>