我有一个函数 get_image(...)
,它对我的输入图像执行预处理 . 我在列表中收集属于同一批次的所有图像,如下所示:
batch = [get_image(file_path) for file_path in batch_files]
现在我想将此列表转换为单个张量,第一个维度是批量大小维度,这样我就可以将它提供给网络的输入占位符 .
_ = self.sess.run([loss],feed_dict={ input_placeholder: batch })
知道我怎么能这样做吗?
batch_concat = tf.placeholder(shape=[None] + self.image_shape, dtype=tf.float32)
for i in xrange(0,self.batch_size):
if i == 0:
tmp_batch = tf.expand_dims(batch[i], 0)
batch_concat = tmp_batch
else:
tmp_batch = tf.expand_dims(batch[i], 0)
batch_concat = tf.concat(0, [batch_concat, tmp_batch])
当我尝试连接所有张量时,我收到以下错误:
TypeError: The value of a feed cannot be a tf.Tensor object. Acceptable feed values include Python scalars, strings, lists, or numpy ndarrays.
那么也许将张量转换回一个numpy数组就足够了,然后才能将它提供给网络?
3 回答
您可以使用tf.pack将批量列表打包到批次中 .
您还可以使用tf.concat沿第一个维度连接列表并重新整形 .
在TF r1.1包中已被替换为tf.stack
这里的问题是使用张量作为feed_dict中的值 . 而不是将
batch
作为input_placeholder的值,为什么不使用batch
而不是input_placeholder
,假设batch
是您的批量张量?所以,而不是:
做: