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 ...
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
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