批量输入到张量流中的某个层

时间:2017-05-29 11:42:33

标签: tensorflow

我在基于inception-v3的网络上工作。我成功训练网络,现在我想将一批opencv图像提供给我的网络并获得一些输出。 网络的原始占位符接受字符串并将其解码为jpg (this image)但我使用opencv读取视频帧并将其转换为Android.local列表:

nparray

如果我想使用单个图像,因为我直接从opencv读取帧,我将它们转换为np-array然后将其反馈到" Cast:0"初始网络的一层:

  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

结果还可以。但我想提供一批帧:我尝试以当前的方式使用pred = sess.run([predictions], {'Cast:0': img_data})

feed_dict

但我得到了错误;我知道我喂错了批次。你对我如何将一批图像输送到某个网络层有任何建议吗?

1 个答案:

答案 0 :(得分:0)

你的feed_dict(至少)存在问题:feed_dict通常是一个带有张量或字符串(用于张量名称)作为键的字典,以及值(以通常的类型,np数组等形式给出)。 / p>

在这里你使用{'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)})