2017-05-11 92 views
6

Wziąłem dostarczony przykład Abalone i upewniłem się, że zrozumiałem to ... Cóż, myślę, że robię. Ale jako że inny projekt estymatora, nad którym pracuję, produkuje totalne śmieci - próbowałem dodać tensorową tablicę, żeby móc zrozumieć, co się dzieje.Jak dodać Tensorboard do procesu estymatora Tensorflow

Kod Base jest https://www.tensorflow.org/extend/estimators

miałem dodał sesję i pisarza

# 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) 

końcu dodaje

writer.close() 

Kiedy uruchomić kod ... otrzymuję dane plik w katalogu/tmp/ab_tf, plik ten NIE ma wartości NULL. Ale ma też tylko 139 bajtów ... co sugeruje, że nic nie jest pisane ...

Kiedy otwieram to za pomocą deski tensorowej - nie ma danych.

Co robię źle?

Doceń żadnych danych ...

Odpowiedz

0

Trzeba rzeczywiście nazwać swoją pracę Podsumowanie i zapisu pliku. Dodaj linię, aby utworzyć operację podsumowanie ze wszystkich zestawień, które zostały zdefiniowane:

merged = tf.summary.merge_all() # easiest way to do it when you have lots of summaries 

A potem trzeba ocenić ten merged op po uruchomieniu model:

summary, _ = sess.run([merged, nn.train_op], feed_dict=...) 

i wreszcie napisz dane podsumowania, które są zwracane przez operację za pomocą Twojego programu piszącego:

writer.add_summary(summary, tf.train.get_global_step()) 

Nie jestem pozytywny, jak zdać dodatek l operatorów do nn.fit i nn.evaluate, ale musi być sposób, aby to zrobić. W przeciwnym razie wystarczy zadzwonić:

summary = sess.run(merged, feed_dict=...) 

osobno, a następnie zapisać dane podsumowania.

2

W rzeczywistości nie trzeba konfigurować pisarza podsumowującego dla estymatora. Dziennik podsumowań zostanie zapisany w kodzie modelu estymatora.

powiedzmy Twój model_dir dla estymatora jest „./tmp/model”, można zobaczyć podsumowanie za pomocą tensorboard --logdir =./Tmp/Model

+1

co piszesz jest poprawne, nie mam problemu z systemem Tensorboard.Po prostu nie widzę żadnych zmiennych na wyjściu !! –

3

starałem się robić dokładnie to samo jak ty. I w końcu zorientowali się, że trzeba przejść model_dir jako parametr do konstruktora klasy jak ten:

instancję prognozy

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

Widać to udokumentowane w TensorFlow API tutaj: https://www.tensorflow.org/api_docs/python/tf/contrib/learn/Estimator

+0

Dziękuję za pomoc, przeniosłem się do korzystania z Keras jako warstwy API, która jest o wiele łatwiejsza w obsłudze, a dodanie Tensorboard jest łatwe i działa. –

+0

Po raz pierwszy zrealizowałem katalog model_dysku jest taki sam jak log_dir. Dzięki! –