【发布时间】:2017-06-13 11:13:39
【问题描述】:
我已经在包含 5 张图像的同一数据集上训练了两次相同的网络。第一次,每个步骤的批次中的图像顺序相同。第二次,在每个训练步骤之前对批次进行洗牌。两种模型都过拟合。两种模型都在训练数据集中的混洗图像上进行了测试。 第一个模型显示出 100% 的准确度。 ```
Prediction Labels
[6 1 4 3 7] [6 1 4 3 7]
[3 4 1 7 6] [3 4 1 7 6]
[6 1 4 3 7] [6 1 4 3 7]
[4 3 7 6 1] [4 3 7 6 1]
[4 7 6 3 1] [4 7 6 3 1]
[1 3 7 6 4] [1 3 7 6 4]
[3 1 6 7 4] [3 1 6 7 4]
```
第二个模型显示接近随机猜测的准确性。 ```
Prediction Labels
[1 4 3 6 7] [7 4 6 3 1]
[3 6 4 1 7] [7 4 3 1 6]
[1 6 3 7 4] [1 6 4 3 7]
[4 7 3 6 1] [1 6 4 3 7]
[3 6 7 4 1] [4 1 3 7 6]
[1 3 7 4 6] [6 3 4 7 1]
[1 4 7 3 6] [3 7 1 4 6]
```
相关问题 - 无
环境:
- Ubuntu 14.04 64 位
- CUDA 8.0
- cuDNN 5.1
- 来自 pip 的 tensorflow 0.12.1,支持 GPU
数据集
来自 MNIST 的 5 张图片
附加档案
包含可重现示例的代码。
- runner.py 负责准备图像批次并维护队列。
- network.py 包含简单神经网络的代码(2 个带 relu 激活的卷积层,softmax 输出层)
- train_not_shuffled.py 使用非混洗批次训练和测试网络
- train_shuffled.py 使用 shuffled batch 训练和测试网络
我已经多次重新训练模型,尝试了不同的数据集和网络架构。我已经可视化了图表以确保推理使用相同的变量。我还对权重进行了可视化,它们在两种情况下看起来略有不同,但不包含任何可以解释这种行为的异常情况。
【问题讨论】:
-
你说两个模型都过拟合,所以它们在训练数据上的准确率都接近 100%?我认为您在测试中与错误的标签进行比较,即输出模型的预测并查看它正在查看的图像,然后手动对其进行分类
-
我使用相同的代码来测试两个模型,所以标签会在两种情况下混合使用。实际上,错误的实验室顺序或洗牌中的一些错误是我的第一个猜测,所以我仔细检查了这些。
-
这两个模型都过拟合了,这意味着它们在训练集上接近完美。但是后来你说你在训练集上进行了测试并且接近随机。所以你测试它的东西很混乱
-
建议检查内容: - 在两种情况下都使用训练数据集进行测试。具体来说,使用相同的副本。然后,测试的准确性应该与训练的准确性相匹配。 - 将批量大小更改为 1 以进行测试。准确性是否取决于批量大小?除非您不使用批量标准化或其他利用批量统计的算法,否则这可能会提供进一步的见解。
-
训练和测试图像通过不同的路径进入网络。训练图像从队列中获取,而测试图像通过 feed dict 到达占位符。这可以解释为什么推理结果与训练不同,但不能解释为什么它们取决于训练批次中的顺序。
标签: tensorflow