获取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”
来获取这两个属性中的哪一个。它与每个属性的值
属性无关