如何在CNN的tensorflow中设置图像数据集?

时间:2018-06-08 05:03:58

标签: python tensorflow conv-neural-network

我的计算机上有一个图像文件夹,但我不知道如何设置输入图层。这是他们在样本页面上提供的代码。我不确定如何将我的文件夹实现为这种格式。

 def main(unused_argv):
  # Load training and eval data
  mnist = tf.contrib.learn.datasets.load_dataset("mnist")
  train_data = mnist.train.images # Returns np.array
  train_labels = np.asarray(mnist.train.labels, dtype=np.int32)
  eval_data = mnist.test.images # Returns np.array
  eval_labels = np.asarray(mnist.test.labels, dtype=np.int32)

1 个答案:

答案 0 :(得分:2)

您需要将文件夹中的图像转换为矢量(数字集)以提供给网络。

在上面的mnist示例中,您实际使用的是图像的压缩二进制版本。因此,您的结束不需要预处理(除了将像素缩放到0-1之间)。

假设您在当前工作目录中有一个名为orig.jpg的RGB图像。

您将该图像加载为

import numpy as np 
from PIL import Image 
img = Image.open('orig.jpg').convert('RGB')
img = np.array(img)

这将为您提供数字形式的所有图像内容到numpy数组变量。在这种情况下img

根据您的问题,您正在实施卷积神经网络,因此您无需将img变量展平为一维向量。

您可以通过运行

来检查变量的形状
np.shape(img)

通常形状为(lenght, width, 3)

使用图像训练模型之前的最后一步,您可能需要对RGB值进行标准化。您可以将img除以255来实现。这通常可以改善您的优化算法

如果要迭代目录中的完整图像。你可以通过

这样做
for filename in os.listdir(directory_name):
    if filename.endswith(".jpg"):  
         # code to extract the values using os.path.join(directory_name,filename)

使用.jpg到np.array迭代并保存所有图像的完整代码如下。

from PIL import Image
import numpy as np
import os.path

length = 128 # pixels in length
width = 128 # pixels in width


imgs = np.empty((0,length, width, 3)) #empty dummy array, we will append to this array all the images
for filename in os.listdir(directory_name):
    if filename.endswith(".jpg"):
        img = Image.open(os.path.join(directory_name,filename)).convert('RGB')
        imgs = np.append(imgs, np.array(img).reshape((1, length, width, 3)), axis=0)

循环完成后,imgs的形状将为(num_image, length, width, 3)

现在您可以使用此imgs并使用tf.data.Dataset.from_tensor_slices(....)构建一些输入管道,也可以直接使用imgs