Tensorflow 推理结果取决于训练批中图像的顺序
我在同一个5幅图像的数据集上对同一网络进行了两次训练。这是第一次,每个步骤的批处理中的图像顺序相同。这是第二次,在每一个训练步骤之前,该批次都被洗牌。两种型号都过合适。这两个模型都在训练数据集中的随机图像上进行了测试。 firs模型显示了100%的准确性。 ``` ``` 第二个模型显示精度接近随机猜测。 ``` ``` 相关问题-无 环境:Tensorflow 推理结果取决于训练批中图像的顺序,tensorflow,Tensorflow,我在同一个5幅图像的数据集上对同一网络进行了两次训练。这是第一次,每个步骤的批处理中的图像顺序相同。这是第二次,在每一个训练步骤之前,该批次都被洗牌。两种型号都过合适。这两个模型都在训练数据集中的随机图像上进行了测试。 firs模型显示了100%的准确性。 ``` ``` 第二个模型显示精度接近随机猜测。 ``` ``` 相关问题-无 环境: Ubuntu 14.04 64位 CUDA 8.0 cuDNN 5.1 来自pip的tensorflow 0.12.1,支持GPU 数据集 来自MNI
- Ubuntu 14.04 64位
- CUDA 8.0
- cuDNN 5.1
- 来自pip的tensorflow 0.12.1,支持GPU
- runner.py负责准备映像批并维护队列
- network.py包含简单神经网络的代码(2个带relu激活的卷积层,softmax输出层)
- train_not_shuffled.py使用非无序批处理对网络进行训练和测试
- train_shuffled.py使用shuffled批处理对网络进行训练和测试
我多次对模型进行了重新培训,尝试了不同的数据集和网络架构。我将图形可视化,以确保推理使用相同的变量。我还可视化了权重,它们在两种情况下看起来略有不同,但不包含任何可以解释这种行为的异常情况。错误在测试代码中。这条线
images_batch = images_batch.eval()
labels_batch = labels_batch.eval()
单独运行,因此图像和标签实际上来自不同批次。如果批次相同,则标签对应于图像,测试结果完美无瑕。另一方面,当批次被洗牌时,测试预测会与错误的标签进行比较,因此结果很差。
将上面的两行替换为
images_batch, labels_batch = sess.run(train_runner.get_inputs())
修复了问题。您说两个模型都过拟合,所以它们在训练数据上都接近100%的准确度?我会考虑在测试中与错误的标签进行比较,即输出模型的预测并查看它正在查看的图像,并将它分类为使用相同的代码来测试这两种模型,因此在这两种情况下标签都会混合。事实上,我的第一个猜测是错误的标签顺序或洗牌时的一些错误,所以我仔细检查了它们。你们发现两个模型都过拟合,这意味着它们在训练集上接近完美。但是你说你在你的训练集上测试过,接近随机。因此,您在建议检查什么时混淆了测试内容:-在这两种情况下都使用训练数据集进行测试。具体而言,请使用相同的副本。然后,测试的准确性应与培训的准确性相匹配。-将批大小更改为1以进行测试。精度是否取决于批量大小?除非您不使用批标准化或其他利用批统计的算法,否则这可能会提供进一步的见解。培训和测试图像通过不同的路径到达网络。当测试图像通过feed dict到达占位符时,从队列中获取训练图像。这可以解释为什么推理结果与训练不同,但不能解释为什么它们依赖于训练批中的顺序。
images_batch = images_batch.eval()
labels_batch = labels_batch.eval()
images_batch, labels_batch = sess.run(train_runner.get_inputs())