如何在Tensorflow中显示隐藏的图层输出

时间:2017-12-13 07:26:51

标签: python tensorflow neural-network output protocol-buffers

在将模型与其存储的protobuf版本(通过this conversion script)进行比较时,我的输出存在差异。为了调试我分别比较两个层。对于测试序列期间的权重和实际层输出,我收到相同的输出,因此我不确定如何访问隐藏层。

以下是我加载图层的方法

    input  = graph.get_tensor_by_name("lstm_1_input_1:0")
    layer1 = graph.get_tensor_by_name("lstm_1_1/kernel:0")
    layer2 = graph.get_tensor_by_name("lstm_1_1/recurrent_kernel:0")
    layer3 = graph.get_tensor_by_name("time_distributed_1_1/kernel:0")
    output = graph.get_tensor_by_name("activation_1_1/div:0")

以下是我想要展示各个元素的方式。

显示权重

with tf.Session(graph=graph) as sess:
       print sess.run(layer1)
       print sess.run(layer2)
       print sess.run(layer3)

显示输出

with tf.Session(graph=graph) as sess:
    y_out, l1_out, l2_out, l3_out = sess.run([output, layer1, layer2, layer3], feed_dict={input: X_test})

使用此代码sess.run(layer1) == sess.run(layer1,feed_dict={input:X_test}),这不应该是真的。

有人能帮助我吗?

2 个答案:

答案 0 :(得分:2)

当你运行sess.run(layer1)时,你告诉tensorflow来计算layer1张量的值,这是......

layer1 = graph.get_tensor_by_name("lstm_1_1/kernel:0")

...根据你的定义。请注意,LSTM内核是权重变量。 取决于input,这就是为什么您使用sess.run(layer1, feed_dict={input:X_test})获得相同结果的原因。如果提供输入,则不像tensorflow计算输出 - 它计算指定的张量,在这种情况下为layer1

input何时重要?当依赖它时。例如:

  • sess.run(output)。如果没有input或任何可以计算input的张量,它就无法工作。
  • 优化操作,例如tf.train.AdapOptimizer(...).minimize(loss)。运行此操作会更改layer1,但还需要input才能执行此操作。

答案 1 :(得分:-1)

也许您可以尝试TensorBoard并检查图表以查找隐藏图层的输出。