将mnist图像读入Tensorflow

时间:2017-07-05 18:02:42

标签: python tensorflow

我在看this Tensorflow tutorial

在教程中,图像被神奇地读出来:

mnist = learn.datasets.load_dataset("mnist")
train_data = mnist.train.images

我的图片放在两个目录中:

../input/test/
../input/train/

他们都有*.jpg个结尾。

那么如何将它们读入我的程序?

我认为我不能使用learn.datasets.load_dataset,因为这似乎采用了专门的数据集结构,而我只有图像文件夹。

2 个答案:

答案 0 :(得分:6)

mnist.train.images基本上是一个numpy形状的数组[55000,784]。其中,55000是图像数量,784是每个图像中的像素数(每个图像是28x28)

如果要运行此确切代码,则需要从数据中创建类似的numpy数组。因此,您需要迭代所有图像,Azure Search RetryPolicy作为一个numpy数组,展平它并创建一个大小为[num_examples,image_size]的矩阵

以下代码段应该执行此操作:

import os
import cv2
import numpy as np
def load_data(img_dir):
    return np.array([cv2.imread(os.path.join(img_dir, img)).flatten() for img in os.listdir(img_dir) if img.endswith(".jpg")])

启用调试的更全面的代码:

import os
list_of_imgs = []
img_dir = "../input/train/"
for img in os.listdir("."):
    img = os.path.join(img_dir, img)
    if not img.endswith(".jpg"):
        continue
    a = cv2.imread(img)
    if a is None:
        print "Unable to read image", img
        continue
    list_of_imgs.append(a.flatten())
train_data = np.array(list_of_imgs)

注意: 如果您的图像不是28x28x1(黑白图像),则需要更改神经网络架构(在cnn_model_fn中定义)。本教程中的体系结构是一种玩具架构,仅适用于像MNIST这样的简单图像。 Alexnet可能是开始制作RGB图像的好地方。

答案 1 :(得分:2)

您可以查看How do I convert a directory of jpeg images to TFRecords file in tensorflow?中给出的答案。最简单的方法是使用张量流提供的实用程序:build_image_data.py,它完全符合您的要求。