Tensorflow 摘要指标未初始化(用于 Tensorboard)

Tensorflow summary metrics not initializing (for use with Tensorboard)

我正在尝试使用 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)]]

谢谢!

编辑:

在按照下面@Ishant Mrinal 的建议进行更改后,我遇到了一个我之前遇到的错误:

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

这表明精度张量与其他张量的形状不同,它不会为交叉熵或召回抛出此错误。

因为有两条初始化线放置,将这两行移动到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)

第二个问题是由tf.metrics returns两个张量引起的。相反,做

                    _, 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)