Kaggle X FastAi 手写字识别

本文介绍了如何使用FastAi库处理Kaggle手写数字识别挑战。首先,通过PIL.Image和os生成数据,将CSV文件转化为图像。接着,详细阐述了数据读取、训练过程,以及如何进行图像分类预测,核心部分包括使用learner进行预测。虽然未经调参的训练导致过拟合,但单epoch训练就能达到接近Kaggle银牌的水准。ResNet50在实验中表现出最佳效果。
摘要由CSDN通过智能技术生成

原始数据

数据这方面,Kaggle给出的是csv文件,0列表示的是标签,其他28*28列是每个像素的值,而FastAi在设计的时候是没有考虑这种数据的,所以DataLoaders和learner都是不支持该类型的数据的。某些文章的做法是重写DataLoaders和learner的Model,但是个人观点,这样的话直接用Torch不是更好的选择么。FasterAi的API那么用是一定要用的,而数据都是像素值也不必要特殊的预处理,所以生成数据就完事了。

数据生成

采用了PIL.Image中的方法,配合os的文件方法,主要生成思路:

  1. pandas读取像素值数据,转换为28*28的ndarray
  2. 按序号生成图片名称,形如0.png,将训练集的图片放至命名为label(0-9)的文件夹。
  3. 将测试集图片放入任意文件夹。

代码如下:

images = path/'images'
train_image_folder = images/'train'
test_image_folder = images/'test'
m_train = train_df.shape[0]
n_train = train_df.shape[1]
m_test = test_df.shape[0]
n_test = test_df.shape[1]

if not os.path.exists(train_image_folder) and not os.path.exists(test_image_folder):
    os.makedirs(train_image_folder)
    os.makedirs(test_image_folder)
    for i in range(0,m_train):
        matrix = train_df.to_numpy()[i,1:].reshape((28,28))
        img = Image.fromarray((np.uint8(matrix)))
        #img = img.convert('RGB')
        if not os.path.exists(train_image_folder/str(train_df.iloc[i,0])):
            os.mkdir(train_image_folder/str(train_df.iloc[i,0]))
        train_image_name = str(i)
        img.save(train_image_folder/str(train_df.iloc[i,0]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值