如何在while循环中打印张量值?

时间:2017-02-24 16:21:28

标签: python-3.x tensorflow

我对张力流很陌生,我无法解决这个问题。

我有这个循环:

def process_tree_tf(n_child, reprs, weights, bias, embed_dim, activation = tf.nn.relu):
    n_child, reprs = n_child, reprs
    parent_idxs = generate_parents_numpy(n_child)
    loop_idx = reprs.shape[0] - 1
    loop_vars = loop_idx, reprs, parent_idxs, weights, embed_dim

    def  loop_condition(loop_ind, *_):
        return tf.greater(0, loop_idx)

    def loop_body(loop_ind, reprs, parent_idxs, weights, embed_dim):
        x = reprs[loop_ind]
        x_expanded = tf.expand_dims(x, axis=-1)
        w = weights
        out = tf.squeeze(tf.add(tf.matmul(x_expanded,w,transpose_a=True), bias))
        activated = activation(out)
        par_idx = parent_idxs[loop_ind]
        reprs = update_parent(reprs, par_idx, embed_dim, activated)
        reprs = tf.Print(reprs, [reprs]) #This doesn't work
        loop_ind = loop_ind-1
        return loop_ind, reprs, parent_idxs, weights, embed_dim

    return tf.while_loop(loop_condition, loop_body, loop_vars)

我以这种方式评估它:

embed_dim = 2
hidden_dim = 2
n_nodes = 4
batch = 2
reprs = np.ones((n_nodes, embed_dim+hidden_dim))
n_child = np.array([1, 1, 1, 0])
weights = np.ones((embed_dim+hidden_dim, hidden_dim))
bias = np.ones(hidden_dim)
with tf.Session() as sess:
    _, r, *_ = process_tree_tf(n_child, reprs,  weights, bias, embed_dim, activation=tf.nn.relu)
    print(r.eval())

我想检查while循环中reprs的值,但tf.Print似乎无法正常工作,而print只是告诉我它是一个张量并给我它的形状。 我该怎么做呢?

非常感谢你!

2 个答案:

答案 0 :(得分:3)

请看这个网页:https://www.tensorflow.org/api_docs/python/tf/Print

您可以看到tf.Print是一个身份运算符,在评估时会产生打印数据的副作用。因此,您应该使用此行进行打印:

reprs = tf.Print(reprs, [reprs])

希望这有帮助,祝你好运!

答案 1 :(得分:1)

rmeertens建议的方法是我认为正确的方法。我只想添加(作为对你的评论的回应)如果有什么东西在打印" Tensor("而/ update_parent:0,......"那么这意味着那个值在该图表未被评估。

您可能会将此视为" print(r.eval())"的输出。声明,而不是tf.Print()声明。

请注意,tf.Print()的输出以红色显示在PyCharm(我使用的IDE)中,而普通python打印操作的输出显示为黑色。所以tf.Print()输出看起来像一条警告消息。它可能确实打印出来,但你只是忽略它。