更安全的方法是使用分数的整数部分(截断后)nc≈n34训练示例,以及nv≡n−nc用于验证(又名测试)。如果您正在进行交叉验证,您至少可以执行整个训练测试拆分n次(最好2n如果你负担得起),在每个交叉验证“折叠”(复制)结束时记录平均验证损失,这就是 tensorflow 记录的内容;有关如何捕获它的信息,请参见此答案)。当使用蒙特卡罗交叉验证 (MCCV) 时,对于每个n(或者2n如果资源限制允许)复制,可以随机选择(无需替换以使事情更简单)nc用于训练的示例并使用剩余的nv用于验证的示例,甚至没有对子集进行分层(例如,如果您正在进行分类,则基于类)。
这是基于 J. Shao 于 1993 年发表的一篇论文(在此处查看我的答案以获取更多信息),他在该论文中证明了nc≈n34是线性模型选择的最佳选择。那时,机器学习之类的非线性模型(有关此问题的另一个讨论,请参阅此答案)并不那么流行,但据我所知(希望被证明是错误的)没有人花时间证明任何事情与今天流行的类似,所以这是我现在能给你的最好答案。
更新:知道 GPU 在输入批量大小为 2 的幂时工作效率最高,我计算了将数据拆分为训练和验证的不同方法,这将遵循 Jun Shao 制定训练集大小的策略nc≈n34并且两者都nc和nv≡n−nc接近二的幂。一个有趣的注释是,对于n=640,nc≈127因此nv≈513; 因为127≈27和513≈29每当我生成模拟数据时,我计划继续使用这些作为我的训练和验证测试大小。