Tensorflow中将本地以目录名作为label的图片数据集导入

引言

作为一个初学者,在大家平常的学习中都会使用类似于mnist这种可以直接下载导入的数据集,但是当在本地有一组文件层级如下的数据集需要导入处理时,没有什么好的直接的库可以使用,我在一次机器学习的比赛中便遇到了这样的问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|-imagess
|-apple
|-1.jpg
|-2.jpg
|-3.jpg
|-4.jpg
|-5.jpg
...
|-banana
|-1.jpg
|-2.jpg
|-3.jpg
...
|-orange
....

直接上代码

  • 首先导包
1
2
3
import os, cv2
import numpy as np
import tensorflow as tf
  • 第一步遍历最外层根目录,获得子目录
1
2
3
data_dir = 'imagess/'
contents = os.listdir(data_dir)
classes = [each for each in contents if os.path.isdir(data_dir + each)]
  • 第二步,我是要把所有数据整理为[224,224,3],循环每一个文件夹,将图片数据放在inputfirst中 将标签放入labels 代码可能不太好看,但是至少完成了需求。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
labels = []
inputfirst=tf.placeholder(tf.float32, [None, 224, 224, 3])
input_ = tf.placeholder(tf.float32, [None, 224, 224, 3])
with tf.Session() as sess:
for i,each in enumerate(classes,1):
print("Starting {} images".format(each))
class_path = data_dir + each
print(class_path)
files= os.listdir(class_path)

for ii , file in enumerate(files,1):
print(os.path.basename(file))
image_value = tf.read_file(os.path.join(class_path, file))


img = tf.image.decode_jpeg(image_value, channels=3)

tf.global_variables_initializer()

img= tf.image.resize_images(img, [224,224],method=0)
print(img)

imgput= tf.reshape(img,[1,224,224,3])
if ((ii==1)&(i==1)):
inputfirst=imgput
else:

inputfirst=tf.concat([inputfirst,imgput],axis=0)
labels.append(each)

labels=tf.reshape(labels,[-1])
print(inputfirst.shape)
print(labels.shape)

最后inputfirst与labels的shape为

1
2
(2742, 224, 224, 3)
(2742, 1)
打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!

请我喝杯咖啡吧~

支付宝
微信