我对张力流很陌生,我无法解决这个问题。
我有这个循环:
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
只是告诉我它是一个张量并给我它的形状。
我该怎么做呢?
非常感谢你!
答案 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()输出看起来像一条警告消息。它可能确实打印出来,但你只是忽略它。