将 mnist 图像读入 Tensorflow



我正在看这个Tensorflow教程。

在教程中,图像神奇地读成这样:

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

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

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

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

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

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

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 这样的简单图像。Alexnet可能是RGB图像的好起点。

您可以查看如何在张量流中将 jpeg 图像目录转换为 TFRecords 文件中给出的答案?。最简单的方法是使用张量流:build_image_data.py提供的实用程序,它完全可以执行您想要执行的操作。

最新更新