将 mnist 图像读入 TensorFlow

Posted

技术标签:

【中文标题】将 mnist 图像读入 TensorFlow【英文标题】:Read mnist images into Tensorflow 【发布时间】:2017-12-09 12:39:57 【问题描述】:

我在看this Tensorflow tutorial。

在教程中,图像神奇地是这样读取的:

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

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

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

他们都有一个*.jpg 结尾。

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

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

【问题讨论】:

看看:gist.github.com/eerwitt/518b0c9564e500b4b50f 【参考方案1】:

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

如果你想运行这个确切的代码,你需要从你的数据中创建一个类似的 numpy 数组。因此,您需要遍历所有图像,read image 作为一个 numpy 数组,将其展平并创建一个大小为 [num_examples, image_size] 的矩阵

下面的代码 sn -p 应该可以做到:

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 图像的好地方。

【讨论】:

返回AttributeError: 'NoneType' object has no attribute 'flatten'。出于某种原因,即使我确定我指定了正确的文件夹,它也看不到图像。 文件夹是否包含非 jpeg 的图像?您可以尝试上面更全面的代码来帮助调试 cv2 正在返回 None 的图像 还可以尝试更新的单行代码。如果不从与图像相同的目录执行,我的早期代码将无法工作。【参考方案2】:

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

【讨论】:

链接已损坏 :(

以上是关于将 mnist 图像读入 TensorFlow的主要内容,如果未能解决你的问题,请参考以下文章

你如何为 MNIST “导入”图像数据?

如何像 MNIST 数据集一样创建图像数据集?

《动手学深度学习》图像分类数据集(Fashion-MNIST)

将普通的图像数据制作成类似于MNIST数据集的.gz文件(数据集制作)

在 Python 中使用 MNIST FASHION 为图像分类准备/渲染图像

学习 MNIST 后对非 MNIST 图像进行分类