2017-05-11 7 views
6

付属のアワビの例を取り上げ、理解していることを確認しました。しかし、私が取り組んでいる別の見積もりプロジェクトでは、全体のゴミを生産しています - 私はテンソルボードを追加しようとしていますので、何が起こっているのか理解できます。Tensorflowエスティメータプロセスにテンソルボードを追加する方法

ベースのコードがhttps://www.tensorflow.org/extend/estimators

である私は、セッションを追加した作家

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

は最後に、私は、コードを実行すると...私はデータを取得

writer.close() 

を追加しましたファイルは/ tmp/ab_tfにあり、このファイルはnullではありません。しかし、サイズが139バイトしかないので、何も書き込まれていないことを意味します。

これをテンソルボードで開くと、データはありません。

私は間違っていますか?

は、あなたが実際にあなたの集計操作を呼び出し、ファイルに書き込む必要があります...

答えて

0

を任意の入力に感謝します。あなたが定義したすべての要約から集計操作を作成するための行を追加します。

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

をそして、あなたはあなたのモデルを実行すると、このmergedオペアンプを評価する必要があります。

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

そして最後にあなたの作家を使用してopによって返された要約データを書き込みます:

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

私は肯定的ではないl演算子をnn.fitnn.evaluateに変更する必要がありますが、その方法が必要です。それ以外の場合は、

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

を別々に電話してから要約データを書き込んでください。

2

実際には、エスティメータのサマリーライターをセットアップする必要はありません。 サマリーログは、見積もりの​​model_dirに書き込まれます。

あなたはtensorboard使って、要約を表示することができ、 のは、推定のためのあなたのmodel_dirが「./tmp/model」であるとしましょう--logdir =。私はまったく同じことをやろうとした

+1

が正しいですが、私は何の問題Tensorboardを実行しているがありません。私はちょうど出力の変数を見ることができません! –

3

を/ tmp /モデルあなたのように。私は最終的に、あなたがこのようなクラスのコンストラクタにパラメータとしてmodel_dir渡す必要があることを考え出し:

インスタンス化見積もり

NN = tf.contrib.learn.Estimator(model_fn = model_fn、のparams = model_params、model_dir = FLAGS.log_dir)

はあなたがここにTensorFlow APIの文書化、これを見ることができます:あなたが書いたものhttps://www.tensorflow.org/api_docs/python/tf/contrib/learn/Estimator

+0

助けていただきありがとうございます。私はKerasをAPIレイヤーとして使用することになりました。これは作業がはるかに簡単で、Tensorboardを追加することも簡単で作業が簡単です。 –

+0

初めてmodel_dirがlog_dirと同じであることを認識しました。ありがとう! –

関連する問題