kaggle+mnist實(shí)現(xiàn)手寫(xiě)字體識(shí)別
現(xiàn)在的許多手寫(xiě)字體識(shí)別代碼都是基于已有的mnist手寫(xiě)字體數(shù)據(jù)集進(jìn)行的,而kaggle需要用到網(wǎng)站上給出的數(shù)據(jù)集并生成測(cè)試集的輸出用于提交。這里選擇keras搭建卷積網(wǎng)絡(luò)進(jìn)行識(shí)別,可以直接生成測(cè)試集的結(jié)果,最終結(jié)果識(shí)別率大概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)) #從訓(xùn)練數(shù)據(jù)文件讀取數(shù)據(jù)
os.chdir(pwd)
pwd = os.getcwd()
os.chdir(os.path.dirname(inputfile))
test= pd.read_csv(os.path.basename(inputfile2)) #從測(cè)試數(shù)據(jù)文件讀取數(shù)據(jù)
os.chdir(pwd)
x_train=train.iloc[:,1:785] #得到特征數(shù)據(jù)
y_train=train['label']
y_train = np_utils.to_categorical(y_train, 10)
mnist=input_data.read_data_sets("MNIST_data/",one_hot=True) #導(dǎo)入數(shù)據(jù)
x_test=mnist.test.images
y_test=mnist.test.labels
# 根據(jù)不同的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)) #神經(jīng)元隨機(jī)失活
model.add(Flatten()) #拉成一維數(shù)據(jù)
model.add(Dense(128)) #全連接層1
model.add(Activation('relu')) #激活層
model.add(Dropout(0.5)) #隨機(jī)失活
model.add(Dense(nb_classes)) #全連接層2
model.add(Activation('softmax')) #Softmax評(píng)分
#編譯模型
model.compile(loss='categorical_crossentropy',
optimizer='adadelta',
metrics=['accuracy'])
#訓(xùn)練模型
model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs,verbose=1)
model.predict(x_test)
#評(píng)估模型
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)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python可視化學(xué)習(xí)之seaborn調(diào)色盤(pán)
seaborn是在matplotlib基礎(chǔ)上封裝的,所以matplotlib的調(diào)色盤(pán)seaborn都可以使用。本文系統(tǒng)介紹seaborn調(diào)色盤(pán),相較于matplotlib,有諸多不同,需要的可以參考一下2022-02-02
Python實(shí)現(xiàn)簡(jiǎn)單的用戶交互方法詳解
這篇文章給大家分享了關(guān)于Python實(shí)現(xiàn)簡(jiǎn)單的用戶交互的相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。2018-09-09
tensorflow實(shí)現(xiàn)KNN識(shí)別MNIST
這篇文章主要為大家詳細(xì)介紹了tensorflow實(shí)現(xiàn)KNN識(shí)別MNIST,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03
學(xué)會(huì)這個(gè)炫酷圖表利器pyecharts,還怕不被公司重用?
前段時(shí)間,公司高層要看上半年度項(xiàng)目組業(yè)績(jī)數(shù)據(jù)分析,沒(méi)辦法,硬著頭皮也要上!說(shuō)到數(shù)據(jù)分析,肯定離不開(kāi)數(shù)據(jù)的可視化,畢竟圖表比冷冰冰的數(shù)字更加直觀,Boss只想一眼就能看出趨勢(shì)和結(jié)論.今天我們就聊一聊 pyecharts 中幾種常用的圖表, ,需要的朋友可以參考下2021-06-06
在Python web中實(shí)現(xiàn)驗(yàn)證碼圖片代碼分享
這篇文章主要介紹了在Python web中實(shí)現(xiàn)驗(yàn)證碼圖片代碼分享,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11
Python爬蟲(chóng)爬取新浪微博內(nèi)容示例【基于代理IP】
這篇文章主要介紹了Python爬蟲(chóng)爬取新浪微博內(nèi)容,結(jié)合實(shí)例形式分析了Python基于代理IP實(shí)現(xiàn)的微博爬取與抓包分析相關(guān)操作技巧,需要的朋友可以參考下2018-08-08
Python3.x檢查內(nèi)存可用大小的兩種實(shí)現(xiàn)
本文將介紹如何使用Python 3實(shí)現(xiàn)檢查L(zhǎng)inux服務(wù)器內(nèi)存可用大小的方法,包括使用Python標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)和使用Linux命令實(shí)現(xiàn)兩種方式,感興趣可以了解一下2023-05-05
Python+imbox庫(kù)實(shí)現(xiàn)郵件讀取與刪除和附件下載
這篇文章主要為大家詳細(xì)介紹了Python如何使用imbox庫(kù)實(shí)現(xiàn)郵件讀取與刪除以及附件下載,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2025-02-02
python3實(shí)現(xiàn)往mysql中插入datetime類(lèi)型的數(shù)據(jù)
這篇文章主要介紹了python3實(shí)現(xiàn)往mysql中插入datetime類(lèi)型的數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03

