如何在 Tensorflow 中显示隐藏层输出
How to show hidden layer outputs in Tensorflow
在将模型与其存储的 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 内核是权重变量。它 不 取决于 input
,这就是为什么 sess.run(layer1, feed_dict={input:X_test})
会得到相同的结果。如果提供了输入,tensorflow 不会计算输出——它正在计算 指定的 张量,在本例中为 layer1
.
input
什么时候重要?当对它有依赖时。例如:
sess.run(output)
。如果没有 input
或任何允许计算 input
. 的张量,它根本无法工作
- 优化操作,例如
tf.train.AdapOptimizer(...).minimize(loss)
。 运行 此操作将更改 layer1
,但它还需要 input
才能更改。
也许您可以尝试使用 TensorBoard 并检查您的图形以找到隐藏层的输出。
在将模型与其存储的 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 内核是权重变量。它 不 取决于 input
,这就是为什么 sess.run(layer1, feed_dict={input:X_test})
会得到相同的结果。如果提供了输入,tensorflow 不会计算输出——它正在计算 指定的 张量,在本例中为 layer1
.
input
什么时候重要?当对它有依赖时。例如:
sess.run(output)
。如果没有input
或任何允许计算input
. 的张量,它根本无法工作
- 优化操作,例如
tf.train.AdapOptimizer(...).minimize(loss)
。 运行 此操作将更改layer1
,但它还需要input
才能更改。
也许您可以尝试使用 TensorBoard 并检查您的图形以找到隐藏层的输出。