Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
tensorflow:使用不同的输入多次运行相同的度量_Tensorflow_Tensorboard - Fatal编程技术网

tensorflow:使用不同的输入多次运行相同的度量

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

我想在训练期间每100次迭代将预测和回忆保存到tensorboard,并且我需要计算训练和测试数据集的度量。以下是我使用的代码:

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