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 相关文章推荐
Python 字符串定义
Sep 25 Python
Python中使用asyncio 封装文件读写
Sep 11 Python
Python实现读取文件最后n行的方法
Feb 23 Python
python中字符串类型json操作的注意事项
May 02 Python
详解python实现读取邮件数据并下载附件的实例
Aug 03 Python
详解Django中类视图使用装饰器的方式
Aug 12 Python
利用anaconda作为python的依赖库管理方法
Aug 13 Python
如何解决python多种版本冲突问题
Oct 13 Python
10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例
Dec 16 Python
Python基于mediainfo批量重命名图片文件
Dec 29 Python
python使用pymysql模块操作MySQL
Jun 16 Python
详解OpenCV曝光融合
Apr 29 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中使用全局变量的几种方法
2013/06/24 PHP
使用 PHPStorm 开发 Laravel
2015/03/24 PHP
Laravel 5框架学习之表单
2015/04/08 PHP
PHP经典面试题之设计模式(经常遇到)
2015/10/15 PHP
JavaScript 继承详解(二)
2009/07/13 Javascript
js获取当前select 元素值的代码
2010/04/19 Javascript
基于JQuery的访问WebService的代码(可访问Java[Xfire])
2010/11/19 Javascript
jQuery 源码分析笔记(2) 变量列表
2011/05/28 Javascript
jQuery插件jFade实现鼠标经过的图片高亮其它变暗
2015/03/14 Javascript
javascript中关于&& 和 || 表达式的小技巧分享
2015/04/10 Javascript
javascript实现保留两位小数的多种方法
2015/12/18 Javascript
基于JS实现导航条flash导航条
2016/06/17 Javascript
基于VUE选择上传图片并页面显示(图片可删除)
2017/05/25 Javascript
jQuery进阶实践之利用最优雅的方式如何写ajax请求
2017/12/20 jQuery
解决vue请求接口第一次成功,第二次失败问题
2020/09/08 Javascript
Python Matplotlib库入门指南
2015/05/18 Python
Python函数中*args和**kwargs来传递变长参数的用法
2016/01/26 Python
Python中使用插入排序算法的简单分析与代码示例
2016/05/04 Python
Python安装使用命令行交互模块pexpect的基础教程
2016/05/12 Python
python线程池(threadpool)模块使用笔记详解
2017/11/17 Python
详解pyqt5 动画在QThread线程中无法运行问题
2018/05/05 Python
浅谈Python 多进程默认不能共享全局变量的问题
2019/01/11 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
2019/06/18 Python
pyinstaller打包单文件时--uac-admin选项不起作用怎么办
2020/04/15 Python
Python虚拟环境的创建和包下载过程分析
2020/06/19 Python
如何在windows下安装配置python工具Ulipad
2020/10/27 Python
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
2014/09/09 面试题
static全局变量与普通的全局变量有什么区别
2014/05/27 面试题
军训自我鉴定范文
2014/02/13 职场文书
禁烟标语大全
2014/06/11 职场文书
庆祝国庆节标语
2014/10/09 职场文书
设立有限责任公司出资协议书
2014/11/01 职场文书
《桂花雨》教学反思
2016/02/19 职场文书
CSS中em的正确打开方式详解
2021/04/08 HTML / CSS
CSS 新特性 contain控制页面的重绘与重排问题
2021/04/30 HTML / CSS
Python pygame实现中国象棋单机版源码
2021/06/20 Python