2016-07-24 69 views
1

对于在python中使用tensorflow的softmax回归程序,我想将我的1000个jpeg图像文件作为2D张量x:[image index,pixel index]。 “图像索引”是图像,像素索引是该图像的特定图像像素。 模型等式是:在张量流中获取多个图像文件作为二维张量

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])) 

图像尺寸=高*图像的宽度(常数所有图片)。

张量传递中获得图像文件的最佳方式是什么?

回答

1

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

然后,您可以将这些numpy数组弄平,以获得图像的平面表示。只需调用np.ndarray的flatten()函数即可。在加载并压扁了批处理图像之后,将它们串联在一个numpy数组np.array([img1, img2, ..., imgN])中,并且此数组的形状将为[图像,像素]。然后,您可以将此内容提供给您的x占位符。

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