在接触tensorflow之前我还从未接触过深度学习,所以刚开始写tensorflow就卡在了数据集上了,官方提供了mnist和cifar10两种数据集的训练代码,如果我们希望将自己的图像数据同样用在示例代码上,那么我们必须建立同样格式的数据集,我在初期就是这样做的,实际上在另一篇博文 windows下编译mnisten 我已经写了该如何制作mnist格式的数据集了。而现在我们可以构建自定义格式(我把它称为znyp格式)并输入模型进行训练,这将更加方便且利于理解。
构建数据集
构建数据集的核心代码如下:
from PIL import Image
import numpy as np
im = Image.open('images.jpeg')
im = (np.array(im))
r = im[:,:,0].flatten()
g = im[:,:,1].flatten()
b = im[:,:,2].flatten()
label = [1]
out = np.array(list(label) + list(r) + list(g) + list(b),np.uint8)
out.tofile("out.bin")
这是我在stack overflow中找到的,原理就是对于每一张图片,我们读取图片像素并转为numpy格式然后写入磁盘即可。事实上我尝试使用for循环来读取像素
data = []
for c in range(3):
for w in range(32):
for h in range(32):
data.append(pix[w,h][c])
两种代码的速度比起来,使用for循环会慢很多,所以我不建议使用for循环来读取图片像素,特别是在数据量比较大的情况。接下来我们对这段核心代码进行改造,使它能够真正制作数据集并具有一定的可拓展性。首先为了同时支持灰度图和RGB图像的读取,我们可以做一个判断