如何在tenforflow中拼接两个张量

时间:2017-05-14 23:40:04

标签: tensorflow

假设我已经阅读了文件名imgfiles_op的张量及其对应的标签labels_op,我可以看到带有batch_size文件名的打印件,后跟带有以下片段的batch_size标签:

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(coord=coord)

    for i in range(2):
        print ("Batch= ", i)
        pair = tf.convert_to_tensor([imgfiles_op, labels_op]).eval()

        print ('imgfile=%s, label=%s' % (pair[0],
                                         pair[1]))

    coord.request_stop()
    coord.join(threads)

我的问题是如何获得这种格式的照片:"<filename> <label>"。 我没有得到以下工作,并且运行它只是挂起。我的想法是列出这样的对。所以&#39; pair_list&#39;下面应该是batch_size的大小。

for i in range(2):
        print ("Batch= ", i)
        pair_list_op = tf.train.slice_input_producer([imgfiles_op, labels_op],
                                                     shuffle=False)
        pair_list = sess.run(pair_list_op)
        for p in pair_list:
            print ('imgfile=%s, label=%s' % (p[0],
                                             p[1]))

问题: 1.为什么第二个代码段会挂起?有没有一种好方法可以确保任何TF代码都不会挂起?这种效果令新TF用户感到沮丧。

  1. 当然我可以这样做python方式,但我想知道TF的方式是什么。
  2. 谢谢!

1 个答案:

答案 0 :(得分:2)

一种可能的解决方案可能是:

p1 = tf.constant(['f1','f2','f3'])
p2 = tf.constant(['1','0','1'])
p3 = tf.stack([p1, p2])
p4 = tf.stack([p1, p2],axis=1)
sess = tf.Session()
print(sess.run(p3))
print(sess.run(p4))

输出:

array([['f1', 'f2', 'f3'],
       ['1', '0', '1']], dtype=object)

array([['f1', '1'],
       ['f2', '0'],
       ['f3', '1']], dtype=object)

在第二种情况(p4)中,您可以看到文件名和标签可以按照您的指定显示。您可以使用axis = 1堆叠image_filenames和标签。

这对你有帮助吗??