Python os.listdir 排序不正确导致数据错误

前段时间在训练模型时,发现了一个莫名的问题,在两台机器上训练结果完全不同,一台机器可以拟合的比较好,另一台完全无法拟合数据。
同时,两台机器拿相同模型weights相同数据进行evaluate时,结果也相差很大。

检查各种问题,发现是读取数据的时候使用Python os.listdir获取路径下的所有文件,而这个方法的返回值是路径下所有文件名组成的一个list,重点是这个list顺序是没有规律的(在其中一台机器上是顺序的)。
这个问题导致读取的数据和label没有对应,自然也就不能训练理想的结果,同时evaluate时也会出现较高loss的情况。

解决方法也很简单,直接对os.listdir返回的list,进行一次排序就可以了。排序使得文件顺序和label对应,具体顺序根据label顺序来定。