模仿MNIST读取自己的数据集
目录
困扰
不会制作mnist数据集,但是有自己的数据集需要读取并训练。
解决思路
用python 提供的数据包,通过制作的带标签txt文档,来读取图片。
txt文档内容包含,路径,标签,截图如下:
通过图片详细路径来读取图片,并保存在矩阵当中,同时,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() 可以将数组置乱,在这里用来乱序读取数据,以增强可靠性。
后面的注释代码可以查看,训练集和测试集的形状以及标签的内容,还可以显示保存在矩阵中的图片。
孰能生巧。