Fork me on GitHub

Kaggle-Digit Recognizer

Digit Recognizer

KNN的方法:

遇到的问题(issue)

  • toInt()函数,是将字符串转换为整数,因为从csv文件读取出来的,是字符串类型的,比如‘253’,而我们接下来运算需要的是整数类型的,因此要转换,int(‘253’)=253。toInt()函数实现功能
  • 主要是数据预处理:参考代码是py2.7的,我改为3.5遇到了几个坑
  • 'dict' object has no attribute 'iteritems' Python3.5中:iteritems变为items
  • python 3.5: TypeError: a bytes-like object is required, not 'str';出现该错误往往是通过open()函数打开文本文件时,使用了‘rb’属性
  • 但是result的格式不对(没有头,然后隔行有数),然后自己开始对CSV格式操作不熟,费了很大的劲才弄成提交的格式
  • 那么获得奇数的语句print x[::2];偶数的语句print x[1::2]

import csv

def saveCsvfile(listfile):
    csvfile = open('kNN_Digit Recognize.csv', 'w', newline = '')
    #要有参数 newline = '' 否则会出现每一行后空一行的现象。
    writer = csv.writer(csvfile)
    writer.writerow(['ImageId', 'Label']) #标题
    data = []
    for i in enumerate(listfile):
        data.append((i[0]+1,i[1])) #enumerate的序号是从0开始的,所以要加1
    writer.writerows(data)
    csvfile.close()

  • 处理完整个数据集耗费了大概三个半小时的时间,实在是令人无语啊,其中这也是kNN的一个缺点,每次都要计算测试样本与所有训练样本的距离,计算量实在太大

CNN实现

  • tensorflow平台
  • 完整的tensorflow实现两个卷积(conv+relu+pool)+两个fc
  • 其中将训练,验证,测试完整实现,可视化卷积特征;代码写法很值得学习
  • 参考:https://www.kaggle.com/ranjiewen/tensorflow-deep-nn
  • precision:0.99242
  • 2017.09.17实践

遇到的问题(issue)

  • 基本都是按照kernel实现,很清楚
  • 训练的电脑需要用GPU,可能会快些,内存消耗比较大
  • 尝试修改参数,能否提高指标
  • 改进点:1.改网络结构添加卷积层,做两个卷积操作然后在maxpool; 2.做数据增强(Data augmentation)

CNN+BN-method3

  • 参考:https://www.kaggle.com/ranjiewen/99-45-cnn-batchnorm-ensembling
  • 跑完代码整体感觉,代码可读性不强,没有之前method2的封装好
  • 同样的代码在windows(py3.5)下和utuntu(py2.7)效果不一样,有些用法不一样,比如py2.7除法需要加float类型转换
  • epoch=1,精度不好0.8+;当epoch=10时:precision:0.9887
  • 作者说自己能达到0.99+,不知道怎么finetune的方法
  • 可读性没有method2
  • 2017.10.30实践

ResNet_method4

Keras-cnn-method5

Reference

posted @ 2017-11-01 20:19  ranjiewen  阅读(961)  评论(0编辑  收藏  举报