Tensorflow 如何拼接tenforflow中的两个张量

Tensorflow 如何拼接tenforflow中的两个张量,tensorflow,Tensorflow,假设我读入了文件名的张量imgfiles\u op及其相应的标签labels\u op,我可以看到文件名的批量大小和标签的批量大小以及以下代码片段的打印: with tf.Session() as sess: sess.run(tf.global_variables_initializer()) coord = tf.train.Coordinator() threads = tf.train.start_queue_runners(coord=coord) f

假设我读入了文件名的张量
imgfiles\u op
及其相应的标签
labels\u op
,我可以看到文件名的批量大小和标签的批量大小以及以下代码片段的打印:

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)
我的问题是如何获得这种格式的打印:
。 我没有得到下面的工作,运行这个只是挂起。我的想法是列一张这样一对的清单。因此,下面的“
pair\u list
”应为批量大小

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用户感到沮丧

  • 当然,我可以用python的方式来做,但我想知道TF是如何做的

  • 谢谢

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

    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堆叠图像文件名和标签


    这对你有帮助吗???

    谢谢!stack()有帮助!但我想知道更多为什么slice\u input\u producer()不工作,特别是为什么程序挂起。@卡拉狄加,我不知道为什么要将图形放入for循环。切片\u输入\u生产者是一个图形节点。for循环应在sess.run行之前。如果您运行sess.run(pair\u list\u op)-它将生成结果。但同样,您最终将以python的方式进行操作。我想tf.stack()是一个更好的选择。