如何为图像数据集添加标签以进行分类?

时间:2017-01-12 11:27:17

标签: python machine-learning tensorflow deep-learning

我在mac os上安装了python 3.6。我有文本文件存储图像的名称和每个图像的类号。

     #label.txt:
     img0001.jpg  1
     img0002.jpg  3
     img0003.jpg  5
     img0004.jpg  10
     img0005.jpg  6
     img0006.jpg  8
     img0007.jpg  10
     .....

我想将它们作为输入数据的标签提供给中的神经网络,并像这样同时将图像提供给网络

    xs = tf.placeholder(tf.float32,[None,#size of my photo]) 
    ys = tf.placeholder(tf.float32,[None,#size of my label if it is an array])

我找不到任何相关文档。有人可以告诉我,我应该为此感到高兴吗?

2 个答案:

答案 0 :(得分:3)

您可以使用streight forward python i / o实用程序(https://docs.python.org/3/tutorial/inputoutput.html),如:

names = []
labels = []
with open('label.txt', 'r') as f:
    for line in f.readlines():
       tokens = line.split(' ')
       names.append(tokens[0])
       labels.append(int(tokens[1]))

然后您可以使用names数组加载图像,将标签加载为y数组。

答案 1 :(得分:3)

假设您想知道如何将图像及其各自的标签输入神经网络。

有两件事:

  1. 读取图像并将其转换为numpy数组。
  2. 将相同及其相应的标签送入网络。
  3. 正如Thomas Pinetz所说,一旦你计算了名字和标签。创建一个标签的热编码。

    from PIL import Image
    number_of_batches = len(names)/ batch_size
    for i in range(number_of_batches):
         batch_x = names[i*batch_size:i*batch_size+batch_size]
         batch_y = labels[i*batch_size:i*batch_size+batch_size]
         batch_image_data = np.empty([batch_size, image_height, image_width, image_depth], dtype=np.int)
         for ix in range(len(batch_x)):
            f = batch_x[ix]
            batch_image_data[ix] = np.array(Image.open(data_dir+f))
         sess.run(train_op, feed_dict={xs:batch_image_data, ys:batch_y})