获取tensorflow图中常数节点的值

获取tensorflow图中常数节点的值,tensorflow,Tensorflow,我正在使用tf.Estimator创建我的模型。这是一段时间的培训,然后执行estimator.export\u savedmodel。由于我使用辍学进行培训,我担心培训后直接进行导出会在进行预测时应用辍学 现在我只有一个加载了tf.saved\u model.loader.load的模型。我想我可以从加载模型的会话中获得图形定义。我可以在这里检查dropout的值吗?事实证明,您可以检查图表中任何变量或常量的值。毕竟,这就是导出模型的目的 您应该可以访问加载模型的会话。 在这种情况下,您可以遍

我正在使用
tf.Estimator
创建我的模型。这是一段时间的培训,然后执行
estimator.export\u savedmodel
。由于我使用辍学进行培训,我担心培训后直接进行导出会在进行预测时应用辍学


现在我只有一个加载了
tf.saved\u model.loader.load
的模型。我想我可以从加载模型的会话中获得图形定义。我可以在这里检查dropout的值吗?

事实证明,您可以检查图表中任何变量或常量的值。毕竟,这就是导出模型的目的

您应该可以访问加载模型的会话。 在这种情况下,您可以遍历图中的所有节点,如中所述,并提取与辍学值对应的节点。如果您没有给它一个特定的名称,它将默认为
name\u space/dropout/keep\u prob

dropout_nodes = [node for node in sess.graph_def.node if 'dropout' in node.name]
然后,可以检查任何此类节点的值。在我的例子中,它看起来是这样的:

name: "deep_bidirectional_lstm/dropout/keep_prob"
op: "Const"
attr {
  key: "dtype"
  value {
    type: DT_FLOAT
  }
}
attr {
  key: "value"
  value {
    tensor {
      dtype: DT_FLOAT
      tensor_shape {
      }
      float_val: 1.0
    }
  }
}
这是一个protobuf消息。它表示运算是一个
“Const”
,其值是
DT_FLOAT
类型的
张量,没有形状,值
1.0

您可以使用protobuf API将其解析到字典中,或者如果只需要最后一部分,您可以像这样提取它:

print(dropout_nodes[0].attr.get('value').tensor.float_val[0])
1.0
所以你是安全的,你的退学率是1:)


大约一年后回到这里,我意识到有一个混淆点:当你说
.attr.get('value')
时,
'value'
指的是根据它们的
“dtype”
,或
“value”
来获取这两个属性中的哪一个。它与每个属性的
属性无关