0

テンソルボードで以下のコードを使用するテンソルフローによる精度とリコールの要約統計量を記録しようとしています。Tensorflowのサマリーメトリックが初期化されていません(テンソルボード用)

グローバル変数とローカル変数のイニシャライザの両方を追加しましたが、これは 'recall'の初期化されていない値を持っていることを示すエラーをスローします。

これはまだエラーが発生している理由は誰にもありますか?

エラーメッセージは、コードブロック

def classifier_graph(x, y, learning_rate=0.1): 

     with tf.name_scope('classifier'): 
       with tf.name_scope('model'): 
         W = tf.Variable(tf.zeros([xdim, ydim]), name='W') 
         b = tf.Variable(tf.zeros([ydim]), name='b') 
         y_ = tf.matmul(x, W) + b 

       with tf.name_scope('cross_entropy'): 
         diff = tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=y_) 
         cross_entropy = tf.reduce_mean(diff) 
         summary = tf.summary.scalar('cross_entropy', cross_entropy) 

       with tf.name_scope('train'): 
         #cross_entropy = tf.reduce_mean(-tf.reduce_sum(y * tf.log(y_), reduction_indices=[1]), name='cross_entropy') 
         train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(cross_entropy) 
         # minimise cross_entropy via GD 

       #with tf.name_scope('init'): 
         #init = tf.global_variables_initializer() 
         #local_init = tf.local_variables_initializer() 
         #init = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer()) 

       with tf.name_scope('init'): 
         init = tf.global_variables_initializer() 
         init_l = tf.local_variables_initializer() 


       with tf.name_scope('metrics'): 
         recall = tf.metrics.recall(y, y_) 
         precision = tf.metrics.precision(y, y_) 

         v_rec = tf.summary.scalar('recall', recall) 
         v_prec = tf.summary.scalar('precision', precision) 

         metrics = tf.summary.merge_all() 

     return [W, b, y_, cross_entropy, train_step, init, init_l, metrics] 



def train_classifier(insamples, outsamples, batch_size, iterations, feature_set_index=1, model=None, device): 
    x = tf.placeholder(tf.float32, [None, xdim], name='x') # None indications arbitrary first dimension 
    y = tf.placeholder(tf.float32, [None, ydim], name='y') 
    W, b, y_, cross_entropy, train_step, init, init_l, metrics = classifier_graph(x, y) 

    with tf.Session(config=config) as sess, tf.device(device): 
     sess.run(init) 
     sess.run(init_l) 
     file_writer = tf.summary.FileWriter(logdir, tf.get_default_graph()) 

     t = 0 
     while t < iterations: 

      t += 1 
      _, err, metrics_str = sess.run([train_step, cross_entropy, metrics], feed_dict={x: batch_x, y: batch_y }) 

      all_err.append(err) 
      file_writer.add_summary(metrics_str,t) 

    return 'Done' 

の下に、正確なエラーメッセージは以下です:

FailedPreconditionError (see above for traceback): Attempting to use uninitialized value recall/true_positives/count 
    [[Node: recall/true_positives/count/read = Identity[T=DT_FLOAT, _class=["loc:@recall/true_positives/count"], _device="/job:localhost/replica:0/task:0/gpu:0"](recall/true_positives/count)]] 

ありがとう!

EDIT:私は以前に当たったエラーが発生した以下@Ishant Mrinalによって提案された変更を行う際

InvalidArgumentError (see above for traceback): tags and values not the same shape: [] != [2] (tag 'precision_1') 

これは精密テンソルは異なる形状であることを示唆しています他の人には、クロスエントロピーやリコールのためにこのエラーは発生しません。

答えて

0

2つの初期化行配置のため、これらの2行をtrain_classifier関数に移動します。このエラーは、一部の変数が初期化されていないことを示しています。

def train_classifier(...): 
    ... 
    init = tf.global_variables_initializer() 
    init_l = tf.local_variables_initializer() 
    with tf.Session(config=config) as sess, tf.device(device): 
     sess.run(init) 
     sess.run(init_l) 
+0

おかげで、やる、これは奇妙なエラーがスローされます。 'InvalidArgumentError(トレースバックについては上記参照):タグと値ではない同じ形状を:![] = [ 2](tag 'precision_1') ' タグと値が高精度タグでのみ異なる次元のものになる理由は分かりますか?それはクロスエントロピーまたはリコールのためのエラーをスローしませんでした。 –

+0

問題は 'tf.summary.scalar'に関連しています。 https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/summary_op.cc#L46 –

1

第2の問題は、tf.metricsが2つのテンソルを返すことによって発生します。代わりに、私は過去にこれをしようとした

    _, recall = tf.metrics.recall(y, y_) 
        _, precision = tf.metrics.precision(y, y_) 

        v_rec = tf.summary.scalar('recall', recall) 
        v_prec = tf.summary.scalar('precision', precision) 
関連する問題