# 验证码数字识别
[数据集等](https://github.com/zyq-361/KaggleMachCode/tree/master/match3)
本次竞赛的目的是对由3位数字构成的图像进行识别,例如,当图像中的数字为001时,识别结果为1;当图像中的数字为011时,识别结果为11;当图像中的数字为111时,识别结果为111。
## 赛制介绍
本次比赛系机器学习方向2016级内部竞赛的第三次竞赛(决赛),旨在通过对图像数据进行建模分析,完整地完成比赛过程。通过本次比赛,学生应该掌握对图像数据的基本处理和熟悉计算机视觉领域的基本任务及解决方法等。
### 赛程安排
**时间**:10月31日-11月27日。
**流程**:
1.每位同学注册一个kaggle账号,并登入,然后打开指定链接,参与比赛,最后由小组组长将组员结合为一个team,每位同学可以查看相应的竞赛要求和数据集。
2.从该平台下载数据集,本地调试算法,并在该平台上提交结果,提交完成后,即得相应的分数并可以查看公共排名结果。(注意:公共排名仅供参考,比赛结束后,最终排名以私有排名为准)
3.每支参赛队伍每天有且仅有二次提交机会,高分成绩直接覆盖低分成绩。
4.比赛提供标准训练集(含标签),仅供参赛选手训练算法模型;提供标准测试数据集(无标签),供参赛选手提交评测结果参与排名。比赛中严禁使用外部数据集,一经发现,成绩作废。
5.比赛中需要使用代码管理工具对代码进行管理,并在提交结果之后存储当前代码作为提交成绩依据的记录,比赛结束公布最终排名时需提交取得最高成绩的代码。
6.比赛截止时,将对所有参赛队伍代码进行审核,识别并剔除只靠人工标注而没有算法贡献的队伍与使用重复代码参赛的队伍。
### 参赛对象
机器学习方向全体学生,并以小组为单位参赛。
### 成绩评定
根据比赛所设评价标准对参赛队伍提交的结果进行成绩评定并排名。比赛完成后将所有队伍分成三组:
**优秀组**:排名靠前6组。奖励包括较大幅度的平时成绩奖励、期末成绩奖励、其它奖励。
**合格组**:奖励包括平时成绩奖励、期末成绩奖励。
**不屈组**:排名靠后6组。无奖励。
### 比赛组织
软件学院机器学习教研室
## 赛题与数据
### 介绍
根据包含3位数字的图像数据来识别图像的内容。例如,当图像中的数字为001时,识别结果为1;当图像中的数字为011时,识别结果为11;当图像中的数字为111时,识别结果为111。
### 数据集
数据集包含以下四个文件:
|文件名称|文件格式|
|:---|:----|
|train.zip|.zip(19.8M)|
|test.zip|.zip(39.8M)|
|train_labels.csv|.csv(95 KB)|
|sample.csv|.csv(86 KB)|
`train.zip`为训练数据集,其中包含了10000张训练图像。`test.zip`为测试数据集,其中包含了20000张测试图像,当模型训练完成之后,需要对测试集进行预测得到预测结果。`train_labels.csv`为训练集标签。`sample.csv`为提交结果的参考模板。
数据集样本说明:每张图像的大小不一定相同,每张图像中包含一个三位数字。图像示例如下:
![example1](./images/50.jpg) ![example2](./images/53.jpg) ![example3](./images/70.jpg)
数据集标签说明:每一行文本代表一个样本标记,每一个整数代表一个图像类别,即图像中显示的数字大小。
### 提交说明
预测测试集的结果的提交格式参考`sample.csv`中的格式进行提交。要求必须提交`.csv`格式文件,且每条结果与测试集的数据集一一对应。
### 评价指标:
The evaluation metric for this competition is ***Accuracy.***
The Accuracy score is given by: $Accuracy = (TP+TN) / (TP+TN+FP+FN)$
where:
- TP = True positive
- FP = False positive
- TN = True negative
- FN = False negative
# 代码
ckpt_cnn.py
```python
# -*- coding: utf-8 -*-
import tensorflow as tf
import numpy as np
from PIL import Image
import pandas as pd
import random
import time
IMAGE_WIDTH = 160
IMAGE_HEIGHT = 64
MAX_NUM = 3
CHAR_SET_LEN = 10
def text2vec(digit):
text = str(digit)
vector=np.zeros(CHAR_SET_LEN*MAX_NUM)
if len(text)==1:
vector[0]=1
vector[10]=1
vector[20+digit]=1
elif len(text)==2:
vector[0]=1
vector[10+digit//10]=1
vector[20+digit%10]=1
else:
vector[digit//100]=1
vector[10+(digit//10%10)]=1
vector[20+(digit%10)]=1
return vector
#生成一个训练batch
def get_next_batch(batch_size, step, type='train'):
batch_x = np.zeros([batch_size, IMAGE_WIDTH*IMAGE_HEIGHT])
batch_y = np.zeros([batch_size, CHAR_SET_LEN*MAX_NUM])
if type == 'train':
index = [ i for i in train_text_array]
elif type == 'valid':
index = [ i for i in valid_text_array]
# np.random.shuffle(index)
totalNumber = len(index)
indexStart = step * batch_size
for i in range(batch_size):
idx = index[(i + indexStart) % totalNumber]
jpg_path = './train/' + str(idx) + '.jpg'
img = Image.open(jpg_path)
img = img.resize((IMAGE_WIDTH, IMAGE_HEIGHT), Image.ANTIALIAS)
img = img.convert('L')
img = np.array(img)
img = img.flatten() / 255
text = text_val[idx]
text = text2vec(text)
batch_x[i,:] = img
batch_y[i,:] = text
return batch_x, batch_y
#构建卷积神经网络并训练
def train_data_with_CNN():
def weight_variable(shape, name='weight'):
w_alpha=0.01
# init = w_alpha*tf.truncated_normal(shape, stddev=0.1)
init = w_alpha*tf.random_normal(shape)
var = tf.Variable(initial_value=init, name=name)
return var
#初始化偏置
def bias_variable(shape, name='bias'):
b_alpha=0.1
init = b_alpha * tf.random_normal(shape)
var = tf.Variable(init, name=name)
return var
#卷积
def conv2d(x, W, name='conv2d'):
return tf.nn.conv2d(x, W, strides=[1,1,1,1], padding='SAME', name=name)
#池化
def max_pool_2X2(x, name='maxpool'):
return tf.nn.max_pool(x, ksize=[1,2,2,1], strides=[1,2,2,1], padding='SAME', name=name)
X = tf.placeholder(tf.float32, [None, IMAGE_HEIGHT * IMAGE_WIDTH], name='data-input')
Y = tf.placeholder(tf.float32, [None, MAX_NUM * CHAR_SET_LEN], name='label-input')
x_input = tf.reshape(X, [-1, IMAGE_HEIGHT, IMAGE_WIDTH, 1], name='x-input')
#dropout,防止过拟合
#请注意 keep_prob 的 name,在测试model时会用到它
keep_prob = tf.placeholder(tf.float32, name='keep-prob')
#第一层卷积
W_conv1 = weight_variable([3,3,1,32], 'W_conv1')
B_conv1 = bias_variable([32], 'B_conv1')
conv1 = tf.nn.relu(conv2d(x_input, W_conv1, 'conv1') + B_conv1)
conv1 = max_pool_2X2(conv1, 'conv1-pool')
conv1 = tf.nn.dropout(conv1, keep_prob)
#第二层卷积
W_conv2 = weight_variable([3,3,32,64], 'W_conv2')
B_conv2 = bias_variable([64], 'B_conv2')
conv2 = tf.nn.relu(conv2d(conv1, W_conv2,'conv2') + B_conv2)
conv2 = max_pool_2X2(conv2, 'conv2-pool')
conv2 = tf.nn.dropout(conv2, keep_prob)
#第三层卷积
W_conv3 = weight_variable([3,3,64,64], 'W_conv3')
B_conv3 = bias_variable([64], 'B_conv3')
conv3 = tf.nn.relu(conv2d(conv2, W_conv3, 'conv3') + B_conv3)
conv3 = max_pool_2X2(conv3, 'conv3-pool')
conv3 = tf.nn.dropout(conv3, keep_prob)
#全链接层
#每次池化后,图片的宽度和高度均缩小为原来的一半,进过上面的三次池化,宽度和高度均缩小8倍
W_fc1 = weight_variable([20*8*64, 1024], 'W_fc1')
B_fc1 = bias_variable([1024], 'B_fc1')
fc1 = tf.reshape(conv3, [-1, 20*8*64])
fc1
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的竞赛项目学习资料,作为参考学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。
资源推荐
资源详情
资源评论
收起资源包目录
基于sklearn进行kaggle数据竞赛基础及实践源码.zip (2000个子文件)
100521 2KB
101666 10KB
102151 2KB
102584 2KB
102585 648B
102586 263B
102587 2KB
102588 957B
102589 3KB
102590 901B
102591 15KB
102592 1KB
102593 302B
102594 667B
102595 1KB
102596 1KB
102597 2KB
102598 1000B
102599 3KB
102600 512B
102601 472B
102602 601B
102603 1KB
102604 6KB
102605 850B
102606 1KB
102607 804B
102608 2KB
102609 2KB
102610 2KB
102611 601B
102612 2KB
102613 2KB
102614 2KB
102615 1KB
102616 562B
102617 542B
102618 782B
102619 1KB
102620 2KB
102621 3KB
102622 2KB
102623 2KB
102624 246B
102625 769B
102626 1KB
102627 4KB
102628 1KB
102629 1KB
102630 284B
102631 1KB
102632 1KB
102633 2KB
102634 934B
102635 1KB
102636 745B
102637 1KB
102638 560B
102639 462B
102640 355B
102641 568B
102642 411B
102643 1KB
102644 626B
102645 503B
102646 1KB
102647 2KB
102648 6KB
102649 2KB
102650 687B
102651 2KB
102652 1KB
102653 2KB
102654 638B
102655 969B
102656 452B
102657 360B
102658 429B
102659 191B
102660 812B
102661 1KB
102662 771B
102663 1KB
102664 443B
102665 695B
102666 3KB
102667 902B
102668 5KB
102669 3KB
102670 4KB
102671 896B
102672 2KB
102673 314B
102674 587B
102675 698B
102676 1KB
102677 882B
102678 2KB
102679 479B
102680 882B
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
土豆片片
- 粉丝: 1567
- 资源: 5642
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 纯用JAVA解析Google的KMZ和KML空间数据的示例代码
- hashcat-gui
- v2.1.6-Unity3D插件 SUIMONO Water System 效果逼真交互水系统
- 基于STM32 Discovery(STM32f407vgt6)Discovery板的STM32裸机项目集合
- 咸鱼快捷指令工具cxtool
- mmexport1717246170188.jpg
- 近代史调查问卷_统计报表_20240601205759.xlsx
- v2.1.2-Unity3D插件 SUIMONO Water System 效果逼真交互水系统
- 农村小别墅图纸编号D040-三层-08.30&14.60米-施工图.dwg
- 三层别墅图纸编号D039-三层-16.70&14.70米- 结构图.dwg
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功