> For the complete documentation index, see [llms.txt](https://baozoulin.gitbook.io/neural-networks-and-deep-learning/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://baozoulin.gitbook.io/neural-networks-and-deep-learning/di-er-men-ke-gai-shan-shen-ceng-shen-jing-wang-luo-chao-can-shu-tiao-shi-zheng-ze-hua-yi-ji-you-hua/improving-deep-neural-networks/practical-aspects-of-deep-learning/11-xun-lian-ff0c-yan-zheng-ff0c-ceshi-ji-ff08-train-dev-test-sets.md).

# 1.1 训练，验证，测试集（Train / Dev / Test sets）

在配置训练、验证和测试数据集的过程中做出正确决策会在很大程度上帮助创建高效的神经网络。训练神经网络时，需要做出很多决策，例如：

1. 神经网络分多少层
2. 每层含有多少个隐藏单元
3. 学习速率是多少
4. 各层采用哪些激活函数

循环迭代的过程是这样的：

1. 先有个想法Idea，先选择初始的参数值，构建神经网络模型结构
2. 然后通过代码Code的形式，实现这个神经网络；
3. 通过实验Experiment验证这些参数对应的神经网络的表现性能。
4. 根据验证结果，对参数进行适当的调整优化，再进行下一次的Idea->Code->Experiment循环。通过很多次的循环，不断调整参数，选定最佳的参数值，从而让神经网络性能最优化

![](https://2314428465-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Le0cHhI0S0DK8pwlrmD%2F-Le0cKOp1vaxoORIi4ak%2F-Le0cvJFVPtzfBB0nUAt%2F%601%60import.png?generation=1556953151900648\&alt=media)

在机器学习发展的小数据量时代，常见做法是将所有数据三七分，就是的70%训练集，30%测试集，如果没有明确设置验证集，也可以按照60%训练，20%验证和20%测试集来划分

![](http://www.ai-start.com/dl2017/images/ebbfb8514ff5a983f41e938d5870b79d.png)

在大数据时代，数据量可能是百万级别，验证集和测试集占数据总量的比例会趋向于变得更小。因为验证集的目的就是验证不同的算法，检验哪种算法更有效，因此，验证集要足够大才能评估，比如2个甚至10个不同算法，并迅速判断出哪种算法更有效。可能不需要拿出20%的数据作为验证集

数据量过百万的应用，训练集可以占到99.5%，验证和测试集各占0.25%，或者验证集占0.4%，测试集占0.1%

![](http://www.ai-start.com/dl2017/images/1224fb0922d5673c380e6dad9ded0b6b.png)

确保验证集和测试集的数据来自同一分布

![](http://www.ai-start.com/dl2017/images/459ffc8998b35b259bc3bab4fd4fb44c.png)

没有测试集也不要紧，测试集的目的是对最终所选定的神经网络系统做出无偏估计，如果不需要无偏估计，也可以不设置测试集。所以如果只有验证集，没有测试集，要做的就是在训练集上训练，尝试不同的模型框架，在验证集上评估这些模型，然后迭代并选出适用的模型。因为验证集中已经涵盖测试集数据，其不再提供无偏性能评估

![](http://www.ai-start.com/dl2017/images/658fc77a1ea588d5768dcd1a9a90761a.png)

搭建训练验证集和测试集能够加速神经网络的集成，也可以更有效地衡量算法的偏差和方差，从而更高效地选择合适方法来优化算法
