"Cannot evaluate tensor using `eval()`: No default session is registered" 将自定义 SessionRunHook 与 Estimator 结合使用时 API
"Cannot evaluate tensor using `eval()`: No default session is registered" while using custom SessionRunHook with Estimator API
我关注 this example 是为了学习如何使用 Estimator API 构建 TensorFlow 的 CNN。在给定的示例中,有一行 pred_probas = tf.nn.softmax(logits_test)
如果我可以获得这些概率,这对我来说非常有价值,因为我想在我写的这个小代码片段中使用它们:
def eer_eval(y_true, probas):
fpr, tpr, thresholds = roc_curve(y_true.eval(), probas[:, 1].eval())
return brentq(lambda x: 1. - x - interp1d(fpr, tpr)(x), 0., 1.)
看完我自己写了hook
class _EERHook(tf.train.SessionRunHook):
def __init__(self, probas, labels):
self.labels = labels
self.probas = probas
def begin(self):
pass
def before_run(self, run_context):
return tf.train.SessionRunArgs(eer_eval(self.labels, self.probas))
def after_run(self,
run_context, # pylint: disable=unused-argument
run_values):
eer = run_values.results
print("EER: ", eer)
我想在模型评估期间使用它
estim_specs = tf.estimator.EstimatorSpec(
mode=mode,
predictions=pred_classes,
loss=loss_op,
train_op=train_op,
eval_metric_ops={'accuracy': acc_op},
evaluation_hooks=[_EERHook(pred_probas, labels)])
但是,代码因错误而崩溃
ValueError: Cannot evaluate tensor using `eval()`: No default session is registered. Use `with sess.as_default()` or pass an explicit session to `eval(session=sess)`
有什么方法可以在评估期间将这些概率保存到人类可读的 csv 文件中,或者让我的代码片段起作用?
这个函数eer_eval(y_true, probas)
显然不是tensorflow的风格。所以也许最好让钩子计算 y_true
和 probas
,然后将 numpy
值赋给 eer_eval()
?
在_EERHook
中:
def before_run(self, run_context):
return tf.train.SessionRunArgs((self.labels, self.probas))
def after_run(self,
run_context, # pylint: disable=unused-argument
run_values):
results = run_values.results
print('labels:', results[0])
print('probas:', results[1])
# err_eval(results[0], results[1])
我关注 this example 是为了学习如何使用 Estimator API 构建 TensorFlow 的 CNN。在给定的示例中,有一行 pred_probas = tf.nn.softmax(logits_test)
如果我可以获得这些概率,这对我来说非常有价值,因为我想在我写的这个小代码片段中使用它们:
def eer_eval(y_true, probas):
fpr, tpr, thresholds = roc_curve(y_true.eval(), probas[:, 1].eval())
return brentq(lambda x: 1. - x - interp1d(fpr, tpr)(x), 0., 1.)
看完
class _EERHook(tf.train.SessionRunHook):
def __init__(self, probas, labels):
self.labels = labels
self.probas = probas
def begin(self):
pass
def before_run(self, run_context):
return tf.train.SessionRunArgs(eer_eval(self.labels, self.probas))
def after_run(self,
run_context, # pylint: disable=unused-argument
run_values):
eer = run_values.results
print("EER: ", eer)
我想在模型评估期间使用它
estim_specs = tf.estimator.EstimatorSpec(
mode=mode,
predictions=pred_classes,
loss=loss_op,
train_op=train_op,
eval_metric_ops={'accuracy': acc_op},
evaluation_hooks=[_EERHook(pred_probas, labels)])
但是,代码因错误而崩溃
ValueError: Cannot evaluate tensor using `eval()`: No default session is registered. Use `with sess.as_default()` or pass an explicit session to `eval(session=sess)`
有什么方法可以在评估期间将这些概率保存到人类可读的 csv 文件中,或者让我的代码片段起作用?
这个函数eer_eval(y_true, probas)
显然不是tensorflow的风格。所以也许最好让钩子计算 y_true
和 probas
,然后将 numpy
值赋给 eer_eval()
?
在_EERHook
中:
def before_run(self, run_context):
return tf.train.SessionRunArgs((self.labels, self.probas))
def after_run(self,
run_context, # pylint: disable=unused-argument
run_values):
results = run_values.results
print('labels:', results[0])
print('probas:', results[1])
# err_eval(results[0], results[1])