2016-07-24 138 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