web-dev-qa-db-fra.com

Comment ajouter Tensorboard à un processus d'estimateur Tensorflow

J'ai pris l'exemple de l'ormeau fourni et je me suis assuré de l'avoir compris ... Eh bien, je pense que oui. Mais comme un autre projet d'estimateur sur lequel je travaille est la production d'ordures totales - j'ai essayé d'ajouter un panneau tensoriel, afin que je puisse comprendre ce qui se passe.

Le code de base est https://www.tensorflow.org/extend/estimators

J'avais ajouté une session et un écrivain

    # Set model params
    model_params = {"learning_rate": 0.01}
    with  tf.Session ()   as  sess: 
        # Instantiate Estimator
        nn = tf.contrib.learn.Estimator(model_fn=model_fn, params=model_params)
        writer  =  tf.summary.FileWriter ( '/tmp/ab_tf' ,  sess.graph)
        nn.fit(x=training_set.data, y=training_set.target, steps=5000)   
        # Score accuracy
        ev = nn.evaluate(x=test_set.data, y=test_set.target, steps=1)


And added 1 line in the model_fn function so it looks like this...


def model_fn(features, targets, mode, params):
  """Model function for Estimator."""

  # Connect the first hidden layer to input layer
  # (features) with relu activation
  first_hidden_layer = tf.contrib.layers.relu(features, 49)

  # Connect the second hidden layer to first hidden layer with relu
  second_hidden_layer = tf.contrib.layers.relu(first_hidden_layer, 49)

  # Connect the output layer to second hidden layer (no activation fn)
  output_layer = tf.contrib.layers.linear(second_hidden_layer, 1)

  # Reshape output layer to 1-dim Tensor to return predictions
  predictions = tf.reshape(output_layer, [-1])
  predictions_dict = {"ages": predictions}

  # Calculate loss using mean squared error
  loss = tf.losses.mean_squared_error(targets, predictions)

  # Calculate root mean squared error as additional eval metric
  eval_metric_ops = {
      "rmse": tf.metrics.root_mean_squared_error(
          tf.cast(targets, tf.float64), predictions)
  }

  train_op = tf.contrib.layers.optimize_loss(
      loss=loss,
      global_step=tf.contrib.framework.get_global_step(),
      learning_rate=params["learning_rate"],
      optimizer="SGD")


  tf.summary.scalar('Loss',loss)

  return model_fn_lib.ModelFnOps(
      mode=mode,
      predictions=predictions_dict,
      loss=loss,
      train_op=train_op,
      eval_metric_ops=eval_metric_ops)

Enfin ajouté un

writer.close()

Lorsque j'exécute le code ... J'obtiens un fichier de données dans/tmp/ab_tf, ce fichier n'est PAS nul. Mais il ne fait également que 139 octets ... ce qui implique que rien n'est écrit ...

Lorsque j'ouvre ceci avec une carte tensorielle - il n'y a pas de données.

Qu'est-ce que je fais mal ?

Appréciez toute entrée ...

13
Tim Seed

En fait, vous n'avez pas besoin de configurer un rédacteur de résumé pour l'estimateur. Le journal récapitulatif sera écrit dans model_dir de l'estimateur.

disons que votre model_dir pour l'estimateur est './tmp/model', vous pouvez afficher le résumé en utilisant tensorboard --logdir =./tmp/model

16
jccf091

J'essayais de faire exactement la même chose que toi. J'ai finalement compris que vous devez passer model_dir en tant que paramètre au constructeur de classe comme ceci:

# Instantiate Estimator
nn = tf.contrib.learn.Estimator(model_fn=model_fn,
        params=model_params, 
        model_dir=FLAGS.log_dir)

Vous pouvez voir cela documenté dans l'API TensorFlow ici: https://www.tensorflow.org/api_docs/python/tf/contrib/learn/Estimator

10
eibarra