kaggle+mnist实现手写字体识别


Posted in Python onJuly 26, 2018

现在的许多手写字体识别代码都是基于已有的mnist手写字体数据集进行的,而kaggle需要用到网站上给出的数据集并生成测试集的输出用于提交。这里选择keras搭建卷积网络进行识别,可以直接生成测试集的结果,最终结果识别率大概97%左右的样子。

# -*- coding: utf-8 -*-
"""
Created on Tue Jun 6 19:07:10 2017

@author: Administrator
"""

from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten 
from keras.layers import Convolution2D, MaxPooling2D 
from keras.utils import np_utils
import os
import pandas as pd
import numpy as np
from tensorflow.examples.tutorials.mnist import input_data
from keras import backend as K
import tensorflow as tf

# 全局变量 
batch_size = 100 
nb_classes = 10 
epochs = 20
# input image dimensions 
img_rows, img_cols = 28, 28 
# number of convolutional filters to use 
nb_filters = 32 
# size of pooling area for max pooling 
pool_size = (2, 2) 
# convolution kernel size 
kernel_size = (3, 3) 

inputfile='F:/data/kaggle/mnist/train.csv'
inputfile2= 'F:/data/kaggle/mnist/test.csv'
outputfile= 'F:/data/kaggle/mnist/test_label.csv'


pwd = os.getcwd()
os.chdir(os.path.dirname(inputfile)) 
train= pd.read_csv(os.path.basename(inputfile)) #从训练数据文件读取数据
os.chdir(pwd)

pwd = os.getcwd()
os.chdir(os.path.dirname(inputfile)) 
test= pd.read_csv(os.path.basename(inputfile2)) #从测试数据文件读取数据
os.chdir(pwd)

x_train=train.iloc[:,1:785] #得到特征数据
y_train=train['label']
y_train = np_utils.to_categorical(y_train, 10)

mnist=input_data.read_data_sets("MNIST_data/",one_hot=True) #导入数据
x_test=mnist.test.images
y_test=mnist.test.labels
# 根据不同的backend定下不同的格式 
if K.image_dim_ordering() == 'th': 
 x_train=np.array(x_train)
 test=np.array(test)
 x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols) 
 x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols) 
 input_shape = (1, img_rows, img_cols) 
 test = test.reshape(test.shape[0], 1, img_rows, img_cols) 
else: 
 x_train=np.array(x_train)
 test=np.array(test)
 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) 
 test = test.reshape(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') 
test = test.astype('float32') 
x_train /= 255 
X_test /= 255
test/=255 
print('X_train shape:', x_train.shape) 
print(x_train.shape[0], 'train samples') 
print(x_test.shape[0], 'test samples') 
print(test.shape[0], 'testOuput samples') 

model=Sequential()#model initial
model.add(Convolution2D(nb_filters, (kernel_size[0], kernel_size[1]), 
      padding='same', 
      input_shape=input_shape)) # 卷积层1 
model.add(Activation('relu')) #激活层 
model.add(Convolution2D(nb_filters, (kernel_size[0], kernel_size[1]))) #卷积层2 
model.add(Activation('relu')) #激活层 
model.add(MaxPooling2D(pool_size=pool_size)) #池化层 
model.add(Dropout(0.25)) #神经元随机失活 
model.add(Flatten()) #拉成一维数据 
model.add(Dense(128)) #全连接层1 
model.add(Activation('relu')) #激活层 
model.add(Dropout(0.5)) #随机失活 
model.add(Dense(nb_classes)) #全连接层2 
model.add(Activation('softmax')) #Softmax评分 

#编译模型 
model.compile(loss='categorical_crossentropy', 
    optimizer='adadelta', 
    metrics=['accuracy']) 
#训练模型 

model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs,verbose=1) 
model.predict(x_test)
#评估模型 
score = model.evaluate(x_test, y_test, verbose=0) 
print('Test score:', score[0]) 
print('Test accuracy:', score[1]) 

y_test=model.predict(test)

sess=tf.InteractiveSession()
y_test=sess.run(tf.arg_max(y_test,1))
y_test=pd.DataFrame(y_test)
y_test.to_csv(outputfile)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
centos 下面安装python2.7 +pip +mysqld
Nov 18 Python
Python reduce()函数的用法小结
Nov 15 Python
python列表,字典,元组简单用法示例
Jul 11 Python
python3中rank函数的用法
Nov 27 Python
django多种支付、并发订单处理实例代码
Dec 13 Python
python装饰器的特性原理详解
Dec 25 Python
Python使用type动态创建类操作示例
Feb 29 Python
pandas数据处理之绘图的实现
Jun 15 Python
浅析Python __name__ 是什么
Jul 07 Python
Python字符串查找基本操作代码案例
Oct 27 Python
python 制作磁力搜索工具
Mar 04 Python
pytorch 把图片数据转化成tensor的操作
Mar 04 Python
解决tensorflow模型参数保存和加载的问题
Jul 26 #Python
解决tensorflow1.x版本加载saver.restore目录报错的问题
Jul 26 #Python
Flask web开发处理POST请求实现(登录案例)
Jul 26 #Python
基于tensorflow加载部分层的方法
Jul 26 #Python
利用python画出折线图
Jul 26 #Python
浅谈flask源码之请求过程
Jul 26 #Python
python画折线图的程序
Jul 26 #Python
You might like
简单的用PHP编写的导航条程序
2006/10/09 PHP
Windows下安装Memcached的步骤说明
2010/04/25 PHP
php通过文件头判断格式的方法
2016/05/28 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
2019/04/09 PHP
一个很有趣3D球状标签云兼容IE8
2014/08/22 Javascript
写给小白的JavaScript引擎指南
2015/12/04 Javascript
JS实现给对象动态添加属性的方法
2017/01/05 Javascript
fullCalendar中文API官方文档
2017/02/07 Javascript
mac上node.js环境的安装测试
2017/07/03 Javascript
基于datepicker定义自己的angular时间组件的示例
2018/03/14 Javascript
vue 本地环境跨域请求proxyTable的方法
2018/09/19 Javascript
Vue面试题及Vue知识点整理
2018/10/07 Javascript
实例详解带参数的 npm script
2019/05/28 Javascript
基于layui实现高级搜索(筛选)功能
2019/07/26 Javascript
微信小程序登录对接Django后端实现JWT方式验证登录详解
2019/07/29 Javascript
超轻量级的js时间库miment使用解析
2019/08/02 Javascript
JavaScript设计模式之策略模式实现原理详解
2020/05/29 Javascript
Python中使用不同编码读写txt文件详解
2015/05/28 Python
Python扫描IP段查看指定端口是否开放的方法
2015/06/09 Python
python如何通过protobuf实现rpc
2016/03/06 Python
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
python+webdriver自动化环境搭建步骤详解
2019/06/03 Python
Python 获取numpy.array索引值的实例
2019/12/06 Python
python 模拟登陆163邮箱
2020/12/15 Python
有机童装:Toby Tiger
2018/05/23 全球购物
英国网上电器商店:Electricshop
2020/03/15 全球购物
新领导上任欢迎词
2014/01/13 职场文书
企业新年寄语
2014/04/04 职场文书
应届毕业生自荐信
2014/05/28 职场文书
司法局群众路线教育实践活动开展情况总结
2014/10/25 职场文书
劳资员岗位职责
2015/02/13 职场文书
文化苦旅读书笔记
2015/06/29 职场文书
2015年公司国庆放假通知
2015/07/30 职场文书
公司借款担保书
2015/09/22 职场文书
Python实现简单的猜单词
2021/06/15 Python
Java十分钟精通进阶适配器模式
2022/04/06 Java/Android