Я построил модель keras и преобразовал ее в модель оценки.В процессе обучения он печатает только потери.Я также хочу напечатать значение метрики, например accuracy
, поэтому я хочу добавить LoggingTensorHook
в train_spec.Но LoggingTensorHook
принимает имя тензора в качестве параметра.Я попробовал несколько имен, а также проверил имя с тензорной доски.Но это не работает, ошибка показана ниже.Что мне делать, чтобы получить правильное тензорное имя, чтобы оно работало?
Произошла ошибка
KeyError: "The name 'dense_1_loss:0' refers to a Tensor which does not exist. The operation, 'dense_1_loss', does not exist in the graph."
Вот пример кода, который я пробовал:
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import sys
import numpy as np
import tensorflow as tf
def input_fn():
x = np.random.random((1024, 10))
y = np.random.randint(2, size=(1024, 1))
x = tf.cast(x, tf.float32)
dataset = tf.data.Dataset.from_tensor_slices((x, y))
dataset = dataset.repeat(100)
dataset = dataset.batch(32)
return dataset
def main(args):
if len(args) < 2:
print('You must specify model_dir for checkpoints such as'
' /tmp/tfkeras_example/.')
return
model_dir = args[1]
print('Using %s to store checkpoints.' % model_dir)
# Define a Keras Model.
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(
16, activation='relu', input_shape=(10,)))
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))
# Compile the model.
optimizer = tf.train.GradientDescentOptimizer(0.2)
model.compile(loss='binary_crossentropy',
optimizer=optimizer, metrics=['accuracy'])
model.summary()
tf.keras.backend.set_learning_phase(True)
# Define DistributionStrategies and convert the Keras Model to an
# Estimator that utilizes these DistributionStrateges.
# Evaluator is a single worker, so using MirroredStrategy.
config = tf.estimator.RunConfig(
experimental_distribute=tf.contrib.distribute.DistributeConfig(
train_distribute=tf.contrib.distribute.CollectiveAllReduceStrategy(),
eval_distribute=tf.contrib.distribute.MirroredStrategy()))
keras_estimator = tf.keras.estimator.model_to_estimator(
keras_model=model, config=config, model_dir=model_dir)
# Train and evaluate the model. Evaluation will be skipped if there is not an
# "evaluator" job in the cluster.
logging_hook = tf.estimator.LoggingTensorHook(
['dense_1_loss'], every_n_iter=10)
tf.estimator.train_and_evaluate(
keras_estimator,
train_spec=tf.estimator.TrainSpec(
input_fn=input_fn, hooks=[logging_hook]),
eval_spec=tf.estimator.EvalSpec(input_fn=input_fn))
if __name__ == '__main__':
tf.logging.set_verbosity(tf.logging.INFO)
tf.app.run(argv=sys.argv)
Здесь представлен подграф всей модели
![enter image description here](https://i.stack.imgur.com/92ods.png)
Добавить метрику к оценке
def my_auc(labels, predictions):
auc_metric = tf.keras.metrics.AUC(name="my_auc")
auc_metric.update_state(
y_true=labels, y_pred=predictions['classes'])
return {'auc': auc_metric}
# add metric to estimator
tf.estimator.add_metrics(keras_estimator, my_auc)