2016-08-17 143 views
0

我需要像卷積運算一樣逐像素地處理圖像。然而,當我這樣做是與Tensorflow跟隨,如何使用Tensorflow處理不同尺寸的圖像?

height = tf.shape(img)[0] 
width = tf.shape(img)[1] 
for h in range(height): 
    for w in range(width): 
     patch = img[h:h+filter_sz, w:w+filter_sz, :] 

我得到了一個錯誤:「使用tf.Tensor爲Python bool是不允許的。」由於圖像是不同大小的,我不能修復的高度和寬度當構造計算圖時。我應該怎麼做?或者,爲什麼tf.nn.conv2d和tf.nn.max_pool可以處理不同大小的圖像?

非常感謝!

回答

0

tf.shape的輸出是Tensor,這意味着它是懶惰的,這意味着它將不會被計算,直到您撥打sess.run。要在定義圖形時獲得Tensor的形狀,應該調用Tensor.get_shape(),它將返回TensorShape。所以上面的代碼應改爲:

height, width = img.get_shape() 
for h in range(height): 
    for w in range(width): 
     patch = img[h:h+filter_sz, w:w+filter_sz, :] 
+0

但我的問題是,我無法知道圖像的形狀(因爲它們的大小不同),當定義圖形。 img被定義爲:img = tf.placeholder(tf.float32)。所以,它裏面沒有形狀信息。 –

+0

然後你應該嘗試'tf.while_loop',它可以在張量上循環。 –