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

2023-12-27

在将模型与其存储的 protobuf 版本进行比较时,我遇到了输出差异(通过这个转换脚本 https://github.com/amir-abdi/keras_to_tensorflow/blob/master/keras_to_tensorflow.py)。为了调试,我分别比较了两个层。对于测试序列期间的权重和实际层输出,我收到相同的输出,因此我不确定如何访问隐藏层。

这是我加载图层的方法

    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})这不应该是真的。

有人可以帮我吗?


当你跑步时sess.run(layer1),你告诉tensorflow计算的值layer1张量,即...

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

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

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

  • sess.run(output)。如果没有input,或任何允许计算的张量input.
  • 优化操作,例如tf.train.AdapOptimizer(...).minimize(loss)。运行这个操作将会改变layer1,但还需要input这样做。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Tensorflow 中显示隐藏层输出 的相关文章

随机推荐