Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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
Python 3.x 在训练用于对象分类/检测的神经网络时,我们如何知道模型收敛?_Python 3.x_Tensorflow_Tensorboard_Object Detection Api - Fatal编程技术网

Python 3.x 在训练用于对象分类/检测的神经网络时,我们如何知道模型收敛?

Python 3.x 在训练用于对象分类/检测的神经网络时,我们如何知道模型收敛?,python-3.x,tensorflow,tensorboard,object-detection-api,Python 3.x,Tensorflow,Tensorboard,Object Detection Api,我正在使用Tensorflow的对象检测API来检测汽车。应将车辆检测为一级“车辆” 我关注了sentdex的以下系列: 系统信息: 操作系统-Ubuntu 18.04 LTS GPU-Nvidia 940M(VRAM:2GB) 张量流:1.10 Python-3.6 英特尔i5处理器 问题: 培训过程运行得很好。为了知道模型何时收敛以及何时应该停止训练,我在训练正在运行的终端中观察每一步训练过程中的损失,并通过在另一个终端中运行以下命令,观察Tensorboard中的总损失图 $tensor

我正在使用Tensorflow的对象检测API来检测汽车。应将车辆检测为一级“车辆”

我关注了sentdex的以下系列:

系统信息:

操作系统-Ubuntu 18.04 LTS

GPU-Nvidia 940M(VRAM:2GB)

张量流:1.10

Python-3.6

英特尔i5处理器

问题: 培训过程运行得很好。为了知道模型何时收敛以及何时应该停止训练,我在训练正在运行的终端中观察每一步训练过程中的损失,并通过在另一个终端中运行以下命令,观察Tensorboard中的总损失图

$tensorboard --logdit="training"
但即使训练到60k步,损失也在2.1到1.2之间波动。如果我停止训练并从最后一个检查点(保存在training/文件夹中)导出推理图,它在某些情况下会检测到汽车,在某些情况下会给出误报

我还试着运行eval.py如下所示

python3 eval.py     --logtostderr     --pipeline_config_path=training/ssd_mobilenet_v1_pets.config     --checkpoint_dir=training/     --eval_dir=eval/
但它给出了一个错误,表明GPU内存无法运行此脚本以及train.py

因此,我停止训练以确保GPU可用,然后运行eval.py,但它在eval/folder中只创建一个评估点。为什么?

另外,我如何从Tensorboard中的精度图中理解培训需要停止

如果有人愿意,我也可以发布截图。 我是否应该继续训练直到平均损失保持在1分左右

谢谢

PS:添加以下总损耗图,直至66k步

PS2:经过2天的训练(仍然持续),这是下面的总损失图


通常,人们使用一组单独的数据来衡量模型的误差和推广能力。因此,可以使用以下数据集来训练和评估模型:

  • 训练集:用于训练模型的数据
  • 验证集:一组单独的数据,用于在培训期间测量误差。此集合的数据不用于执行任何重量更新
  • 测试集:此测试集用于在培训后测量模型的性能
在您的情况下,您必须定义一组单独的数据,验证集,并在固定数量的批次/步骤后重复运行评估,并记录错误或准确性。通常发生的情况是,数据上的错误在开始时会减少,在训练期间的某个点上会增加。因此,跟踪该错误并在该错误减少时生成检查点非常重要。验证数据错误最低的检查点是您要使用的检查点。这种技术称为早期停止

在训练过程中,误差在某一点后增加的原因称为过拟合。它告诉您,模型失去了对看不见的数据进行概括的能力

编辑: 下面是一个带有提前停止程序的训练循环示例:

 for step in range(1, _MAX_ITER):
     if step % _TEST_ITER == 0:
         sample_count = 0
         while True:
                try:
                    test_data = sess.run(test_batch)
                    test_loss, summary = self._model.loss(sess, test_data[0], self._assign_target(test_data), self._merged_summary)
                    sess.run(self._increment_loss_opt, feed_dict={self._current_loss_pl: test_loss})
                    sample_count += 1
                except tf.errors.OutOfRangeError:
                    score = sess.run(self._avg_batch_loss, feed_dict={self._batch_count_pl: sample_count})
                    best_score =sess.run(self._best_loss)
                    if score < best_score:
                        '''
                        Save your model here...
                        '''
步进范围(1,最大值):
如果步骤%\u测试\u ITER==0:
样本计数=0
尽管如此:
尝试:
测试数据=sess.run(测试批处理)
测试损失,汇总=自模型损失(sess,测试数据[0],自分配目标(测试数据),自合并汇总)
sess.run(self.\u increment\u loss\u opt,feed\u dict={self.\u current\u loss\u pl:test\u loss})
样本计数+=1
除了tf.errors.OutOfRangeError:
score=sess.run(self.\u avg\u batch\u loss,feed\u dict={self.\u batch\u count\u pl:sample\u count})
最佳得分=成功跑步(自我最佳失败)
如果分数<最佳分数:
'''
在这里保存您的模型。。。
'''

谢谢你的回答。如何重复评估中的步骤?它不是一直在运行并在完成时显示信息的东西吗?就像训练一开始就独立进行一样?我已经相应地更新了我的答案。我所做的是使用tensorboard将培训和验证可视化。通常,我的培训会运行固定数量的批次或时段,并自动将最佳状态保存到磁盘。所以你可以随时访问美国。谢谢。我试试这个。你不能简单地复制它。你必须自己为计算定义图表。是的,我会研究它。谢谢