如何在Tensorflow中在运行时查看或保存一个张量?

时间:2016-04-04 22:22:59

标签: python machine-learning tensorflow

我有一个模特:

def __init__(params):
    seq2seq() {
        outputs, states = rnn.rnn(...)
    } 

def step()
    ...
    session.run(output_feed, input_feed)

模型由:

调用
with tf.Session as sess:
    model = create_model(sess) (does __init__, loads checkpoint)
    inputs = ...
    outputs = model.step(sess, inputs)

如何打印/保存/查看rnn.rnn()返回的“状态”是什么?

我试过tf.Print(状态[-1],[状态[-1]]),它给出了张量的形状。

Tensor("model/seq2seq/Print:0", shape=TensorShape([Dimension(None), Dimension(4096)]), dtype=float32)

我已经尝试了状态[-1] .eval(),它提供了一系列错误,例如:

  Compute status: Invalid argument: 
  You must feed a value for placeholder tensor 'encoder1' with dtype int32   

我还尝试将var添加到模型中以返回它,但这不起作用:

 def __init__():
     ...
     self.state = state 

 def step():
     output_feed.append(self.state)
     result = session.run(output_feed, input_feed)
     return result

1 个答案:

答案 0 :(得分:1)

为了在eval方法中查看张量的值,您不能依赖图中的任何占位符。在这种情况下,错误消息会告诉您states[-1]依赖于'encoder1'

您可以调用seesion.run并输入占位符的值,如下所示:

session.run(states[-1], feed_dict={encoder1:[#values for encoder1 here
                                            ]})

encoder1是占位符对象。这应该返回states[-1]的值,然后您可以将其序列化以保存。

在您的具体情况下,encoder1可能是rnn中的内部占位符,因此您可能希望运行以下内容:

_, state_values = session.run([output_feed, states[-1]], input_feed)

在运行它的上下文中获取变量的值。