python 数据读取--模仿mnist读取自己的数据集

模仿MNIST读取自己的数据集

目录

  • 模仿MNIST读取自己的数据集
    • 目录
    • 困扰
    • 解决思路
    • 代码
    • 知识点

困扰

不会制作mnist数据集,但是有自己的数据集需要读取并训练。

解决思路

用python 提供的数据包,通过制作的带标签txt文档,来读取图片。
txt文档内容包含,路径,标签,截图如下:
python 数据读取--模仿mnist读取自己的数据集_第1张图片
通过图片详细路径来读取图片,并保存在矩阵当中,同时,txt中的标签来生成标签矩阵。代码如下。

代码

import os
from PIL import Image
import numpy as np
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
import random

def readData(txt_url,isShuffle):
    with open(txt_url,'r') as txtFile:
        content = txtFile.readlines()
        #是否需要打乱顺序读取图片
        if isShuffle == True:
            random.shuffle(content)
        dataLen = len(content)
        images = np.empty((dataLen,20,20),dtype=np.uint8)
        label = np.empty((dataLen,),dtype='uint8')
        for i in range(dataLen):
            line = content[i]
            imgPath = line.split()[0]
            im = Image.open(line.split()[0])
            arr = np.asarray(im,dtype=np.uint8)
            images[i,:,:] = arr
            label[i] = line.split()[1]
    return (label,images)

(train_lbl, train_img) = readData('training_images/train.txt',True)
(val_lbl, val_img) = readData('training_images/test.txt',False)
# print(train_lbl)
# print(train_img.shape)
# print(val_lbl)
# print(val_img.shape)
# #显示单张图片
# for item in range(200):
#   if item==100:
#       plt.imshow(train_img[item])
#       plt.show()

知识点

random.shuffle() 可以将数组置乱,在这里用来乱序读取数据,以增强可靠性。
后面的注释代码可以查看,训练集和测试集的形状以及标签的内容,还可以显示保存在矩阵中的图片。
孰能生巧。

你可能感兴趣的:(数字图像处理,机器学习)