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

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

有人可以帮帮我吗?

最佳答案

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

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

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

什么时候 input 重要?当对它有依赖时。例如:

  • sess.run(输出)。如果没有 input 或任何允许计算 input 的张量,它根本无法工作。
  • 优化操作,例如 tf.train.AdapOptimizer(...).minimize(loss)。运行此操作将更改 layer1,但它也需要 input 来执行此操作。

关于python - 如何在 Tensorflow 中显示隐藏层输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47787627/

相关文章:

python根据日期打印出csv数据

python - python和MyHDL中yield语句的区别

python-3.x - 非 AVX 系统上的 Tensorflow 2.2.0 支持

python - Tensorflow 多变量逻辑回归不起作用

python - 如何应用经过训练的神经网络将输出写入 csv 文件?

facebook - 连体网络 : Why does the network to be duplicated?

python - 类型错误 : __init__() takes exactly 3 arguments (2 given)

python - 通过 Pydev 使用 Django 时出现间歇性 "Page Not Found"

python - Keras、嵌入和 LSTMS。得到错误的形状错误

machine-learning - 谷歌云作业提交培训陷入困境