将mnist图像读入Tensorflow

4

我在查看这个TensorFlow教程

在教程中,图像被神奇地读取如下:

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

我的图像被放置在两个目录中:

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

所有图片都以*.jpg结尾。

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

我认为我不能使用learn.datasets.load_dataset,因为这似乎需要一个专门的数据集结构,而我只有包含图片的文件夹。


请查看:https://gist.github.com/eerwitt/518b0c9564e500b4b50f - grovina
2个回答

6

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

如果您想运行此代码,则需要从您的数据中创建类似的numpy数组。因此,您需要遍历所有图像,将其读取图像为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这样的简单图像。对于RGB图像,Alexnet可能是一个不错的起点。

返回 AttributeError: 'NoneType' object has no attribute 'flatten'。出于某种原因,它无法看到图像,尽管我确定我指定了正确的文件夹。 - bsky
该文件夹中是否包含非jpeg格式的图像?您可以尝试使用上面更全面的代码来帮助调试,以确定cv2返回None的图像。 - user1523170
也可以尝试更新的一行代码。我的早期代码如果不在与图像相同的目录中执行就无法工作。 - user1523170

2

链接已损坏 :( - LYu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接