tensorflow:使用不同的输入多次运行相同的度量
我想在训练期间每100次迭代将预测和回忆保存到tensorboard,并且我需要计算训练和测试数据集的度量。以下是我使用的代码:tensorflow:使用不同的输入多次运行相同的度量,tensorflow,tensorboard,Tensorflow,Tensorboard,我想在训练期间每100次迭代将预测和回忆保存到tensorboard,并且我需要计算训练和测试数据集的度量。以下是我使用的代码: precision, _ = tf.metrics.precision(labels_placeholder, mypredictions, metrics_collections = ['metrics'], updates_collections = ['update_op']) tf.summary.scalar('train_precision', pre
precision, _ = tf.metrics.precision(labels_placeholder, mypredictions,
metrics_collections = ['metrics'], updates_collections = ['update_op'])
tf.summary.scalar('train_precision', precision, collections = ['train_metrics'])
tf.summary.scalar('test_precision', precision, collections = ['test_metrics'])
# the metrics ops have local variables that need to be
# init'd each time.
sess.run(tf.local_variables_initializer())
for batch in range(100):
train_images, train_labels = train_dataset.next_batch()
feed_dict = {images_placeholder: train_images, labels_placeholder: train_labels}
sess.run(tf.get_collection('update_op'), feed_dict = feed_dict)
sess.run(tf.get_collection('metrics'), feed_dict = feed_dict)
summary_str = sess.run(train_metrics_summary, feed_dict=feed_dict)
summary_writer.add_summary(summary_str, global_step_val)
sess.run(tf.local_variables_initializer())
for batch in range(100):
test_images, test_labels = test_dataset.next_batch()
feed_dict = {images_placeholder: test_images, labels_placeholder: test_labels}
sess.run(tf.get_collection('update_op'), feed_dict = feed_dict)
sess.run(tf.get_collection('metrics'), feed_dict = feed_dict)
summary_str = sess.run(test_metrics_summary, feed_dict=feed_dict)
summary_writer.add_summary(summary_str, global_step_val)
注意,为了在训练和测试数据上运行并获得相同变量的摘要,我为训练和测试定义了两个摘要操作,将它们放在不同的集合中,并分别为训练和测试数据运行两个摘要操作
我还认为应该为update_op重新初始化局部变量,因为
它将sum和count变量设置为零
我的问题:这是在列车和测试设备上运行ops的最佳方式吗
TF文件还提到
请注意,在对不同输入多次评估同一度量时,必须指定每个度量的范围,以避免将结果累积在一起:
但这似乎与我的方法不同,因为我只是用一个
myprediction
变量定义了一个变量precision
。似乎我不需要担心这个问题,也不需要添加name
选项?使用tf.metrics
函数时要记住的最重要的一点是,这里的所有Meetric都是运行指标,在多次运行中计算运行指标。有关详细信息,请参阅本文:
因此,这里您计算的是训练和测试数据的累积精度,因为精度的update_op对于两者都是相同的,并且训练和测试两个数据集都在更新相同的运行精度
labels = ...
predictions0 = ...
predictions1 = ...
accuracy0 = tf.contrib.metrics.accuracy(labels, predictions0, name='preds0')
accuracy1 = tf.contrib.metrics.accuracy(labels, predictions1, name='preds1')