1

对于在 python 中使用 tensorflow 的 softmax 回归程序,我想将我的 1000 个 jpeg 图像文件作为 2D 张量 x:[图像索引,像素索引]。“图像索引”是图像,像素索引是该图像的特定图像像素。模型方程为:

y = tf.nn.softmax(tf.matmul(x, W) + b)
where:
x = tf.placeholder(tf.float32, [None, image_size])
W = tf.Variable(tf.zeros([image_size, classes]))
b = tf.Variable(tf.zeros([classes]))

图像大小 = 图像的高度 * 宽度(所有图像的常量)。

在张量流中以这种形式获取我的图像文件的最佳方法是什么?

4

2 回答 2

1

当我进行图像处理时,我喜欢使用 OpenCV (cv2.imread(...)) 或 Scipy (scipy.ndimage.imread(...)) 来读取图像文件。我还认为 tensorflow 可能有自己的图像阅读器可以使用。这两个函数将图像作为 numpy 数组返回。如果您想要灰度或颜色,您可以在参数中指定。现在您需要对图像进行预处理。您可能需要转换数据类型(OpenCV 使用 8 位整数而不是 float32)并规范化数据。如果图像大小不同,您也可以在此时调整大小。

然后,您可以展平这些 numpy 数组以获得图像的平面表示。只需调用 np.ndarray 的 flatten() 函数即可。在你为你的批次加载并展平你想要的图像后,将它们串在一起形成一个 numpy 数组np.array([img1, img2, ..., imgN]),这个数组的形状将是 [图像,像素]。然后,您可以将其提供给您的 x 占位符。

于 2016-07-24T13:23:08.300 回答
0

如果是为了训练,我更愿意对每张图像进行预处理,但是对于在线使用带有实时图像流的 Tensorflow,我会尝试以下方法来动态更改内存中的数据:

any_shape = [the most natural shape according to the data you already have...]
x_unshaped = tf.placeholder(tf.float32, any_shape)
x = tf.reshape(x_unshaped, [-1, image_size])

如果您的数据已经在内存中正确排序,您可以尝试tf.Tensor.set_shape()

tf.Tensor.set_shape() 方法更新张量对象的静态形状,通常用于在无法直接推断时提供额外的形状信息。它不会改变张量的动态形状。

来源:https ://www.tensorflow.org/versions/r0.9/api_docs/python/framework.html

于 2016-07-25T01:18:56.637 回答