回答:
トレーニングの最初に要素をシャッフルし、それらを順番に読み取るだけで十分です。これは実際に毎回ランダムな要素を取得するのと同じ目的を達成します。つまり、元のデータセットに存在する可能性のある事前定義されたあらゆる種類の構造(たとえば、最初のすべてのポジティブ、連続画像など)を壊すことです。
ランダムな要素を毎回フェッチするように機能しますが、この操作は通常、パフォーマンスに関して最適ではありません。データセットは通常大きく、高速ランダムアクセスでメモリに保存されるのではなく、低速HDDに保存されます。つまり、良好なパフォーマンスを得るには、シーケンシャルリードがほとんど唯一のオプションです。
たとえば、Caffeは、効率的なランダムシークをサポートしないLevelDBを使用しています。https://github.com/BVLC/caffe/issues/1087を参照してください。これは、データセットが常に同じ順序で画像を使用してトレーニングされていることを確認します。