2017-05-19 76 views
0

我正在運行tensorflow retrain tutorial,但我不明白爲什麼再培訓圖像可能與模型最初訓練的圖像大小不同。我查看了retrain.py腳本,將圖像提供給模型,但代碼沒有進行任何圖像大小調整,它直接reading the image from disk並立即feeds it to the modeltensorflow再訓練最後一層如何處理不同的圖像尺寸?

有沒有人知道在進行最後一層培訓時如何使用不同大小的圖像?

+0

它可能在飛行中調整圖像大小可以做什麼? – James

+0

你是什麼意思?你是否建議模型可以接受可變大小的圖像? – anthonybell

+0

不是模型,但代碼可能正在執行圖像預處理,以在發送到模型之前調整圖像大小或對圖像進行子集合處理。這只是一個猜測 – James

回答

3

從技術上講,Inception模型可以直接應用於各種圖像尺寸。這是可能的,因爲緻密層前的最後平均池是一個全球平均池(而不是3×3或2×2):

https://github.com/tensorflow/models/blob/master/inception/inception/slim/inception_model.py#L320

 shape = net.get_shape() 
     net = ops.avg_pool(net, shape[1:3], padding='VALID', scope='pool') 

這指定池的窗口成爲整個形象。

換句話說,該池層平均跨空間維度的特徵,所以成爲H x W x 20481 x 1 x 2048不管HW


這就是說,在我的經驗,在規模很大的不同應用神經網絡他們是如何訓練的可能會導致精確度有些脫落(但網絡應工作)

1

@anthonybell你是正確的代碼沒有做任何圖像調整大小。但是,如果你檢查預訓練的網絡有一個圖像尺寸層

<tf.Tensor 'DecodeJpeg/contents:0' shape=() dtype=string>, 
<tf.Tensor 'DecodeJpeg:0' shape=(?, ?, 3) dtype=uint8>, 
<tf.Tensor 'Cast:0' shape=(?, ?, 3) dtype=float32>, 
<tf.Tensor 'ExpandDims/dim:0' shape=(1,) dtype=int32>, 
<tf.Tensor 'ExpandDims:0' shape=(1, ?, ?, 3) dtype=float32>, 
<tf.Tensor 'ResizeBilinear/size:0' shape=(2,) dtype=int32>, 
<tf.Tensor 'ResizeBilinear:0' shape=(1, 299, 299, 3) dtype=float32>, 
<tf.Tensor 'Sub/y:0' shape=() dtype=float32>, 
<tf.Tensor 'Sub:0' shape=(1, 299, 299, 3) dtype=float32>, 
<tf.Tensor 'Mul/y:0' shape=() dtype=float32>, 
<tf.Tensor 'Mul:0' shape=(1, 299, 299, 3) dtype=float32>, 

網絡將接受任何分辨率的圖片,並在內部將被重新調整到299x299

+0

看起來他們必須做某種調整,因爲當你看卷積時,每一層的圖像越來越小。如果我的圖像是8x8開頭的當它達到1x1時它會做什麼.. – anthonybell

+0

這是因爲在卷積層之間夾有池層。如果您的輸入尺寸爲8x8,則調整圖層大小將將圖像大小調整爲299x299。 –