2017-05-29 95 views
0

我正在基於inception-v3的網絡上工作。我成功地訓練了網絡,現在我想喂一批opencv圖像到我的網絡並獲得一些輸出。 網絡的原始佔位符接受一個字符串並對其進行解碼JPG格式(this image)但我OpenCV中讀取視頻幀,並將其轉換爲nparray列表:批量輸入到張量流中的某一層

for cnt in range(batch_size): 
     frameBuffer = [] 
     if (currentPosition >= nFrames): 
      break 
     ret, frame = vidFile.read() 
     img_data = np.asarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)) 
     frameBuffer.append(img_data) 
     currentPosition += multiplier 

如果我想用一個單一的圖像工作,怎麼一回事,因爲我直接讀來自幀的OpenCV,我將它們轉換爲NP-陣列再餵它來:以來網絡的「鑄0」層:

pred = sess.run([predictions], {'Cast:0': img_data}) 

結果爲OK到這一點。但是我要養活一組幀:我想在目前的方式使用feed_dict

images = tf.placeholder(tf.float32, [batch_size,width,height, 3]) 
image_batch = tf.stack(frameBuffer) 

feed_dict = {images: image_batch} 
avgRepresentation, pred = sess.run([pool_avg, predictions],{'Cast:0': feed_dict}) 

,但我得到的錯誤;我知道我在餵養批次時出錯。你有什麼建議,我可以如何喂一批圖像到網絡的某一層?

+0

你能不能給我們你得到了錯誤? – gdelab

+0

pred = sess.run([predictions],{'Cast:0':feed_dict}) 文件「/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py」,第778行,正在運行 run_metadata_ptr) 文件「/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py」,第954行,在_run中 np_val = np.asarray(subfeed_val ,dtype = subfeed_dtype) 文件「/usr/local/lib/python2.7/dist-packages/numpy/core/numeric.py」,第531行,asarray 返回數組(a,dtype,copy = False,order = order) TypeError:float()參數必須是字符串或數字 –

回答

0

您的feed_dict存在(至少)一個問題:feed_dict通常是一個帶有張量或字符串(用於張量名稱)作爲關鍵字的字典,以及值(作爲常用類型,np數組等等)。

這裏你使用的是{'Cast:0': feed_dict},所以你的字典的值本身就是一個字典,這對於張量流是沒有意義的。您需要將值,即圖像連接(解碼,轉換等)。另外,對不起,如果我失去了一些東西,但我想frameBuffer應該包含該批次的所有圖像,所以它應該從for循環中初始化。

此代碼應工作:

frameBuffer = [] 
for cnt in range(batch_size): 
     if (currentPosition >= nFrames): 
      break 
     ret, frame = vidFile.read() 
     img_data = np.asarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)) 
     frameBuffer.append(img_data) 
     currentPosition += multiplier 
avgRepresentation, pred = sess.run([pool_avg, predictions],{'Cast:0': np.asarray(frameBuffer)}) 
+0

@Ryz它能解決您的問題嗎? – gdelab