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

use*_*931 5 python protocol-buffers neural-network output tensorflow

比较模型与其存储的protobuf版本(通过此转换脚本)时,我在输出上存在差异。为了调试,我分别比较了这两层。对于测试序列中的权重和实际图层输出,我会收到相同的输出,因此我不确定如何访问隐藏图层。

这是我如何加载图层

    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")
Run Code Online (Sandbox Code Playgroud)

这是我认为显示各个元素的方式。

显示重量

with tf.Session(graph=graph) as sess:
       print sess.run(layer1)
       print sess.run(layer2)
       print sess.run(layer3)
Run Code Online (Sandbox Code Playgroud)

显示输出

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})
Run Code Online (Sandbox Code Playgroud)

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

有人可以帮我吗?

Max*_*xim 3

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

layer1 = graph.get_tensor_by_name("lstm_1_1/kernel:0")
Run Code Online (Sandbox Code Playgroud)

...根据你的定义。请注意,LSTM 内核是权重变量。它依赖于input,这就是为什么您会得到与 相同的结果sess.run(layer1, feed_dict={input:X_test})。如果提供了输入,张量流并不计算输出——在本例中,它计算指定的张量layer1

那么什么时候input重要呢?当对其产生依赖性时。例如:

  • sess.run(output)input如果没有, 或任何允许计算 的张量,它根本无法工作input
  • 优化操作,例如tf.train.AdapOptimizer(...).minimize(loss). 运行这个操作将会改变layer1,但它也需input要这样做。