2017-05-29 93 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