2016-02-26 5 views
5

各エポックのトレーニングサンプルをシャッフルして、各ミニバッチにデータセット全体の素敵なランダムサンプルが含まれるようにすることを私は理解しています。データセット全体をTFRecordsを含む1つのファイルに変換すると、データセット全体をロードするにはいかがですか?私の理解は、TFRecordファイルへの効率的なランダムアクセスがないことです。したがって、具体的には、このシナリオでTFRecordファイルがどのように使用されるかについてのガイダンスを探しています。TFRecordsとレコードのシャッフル

+0

'RandomShuffleQueue'を使う' shuffle_batch'があります。それはデータセットのバッファされた部分をシャッフルします。この質問には詳細があります - http://stackoverflow.com/questions/33715728/using-queues-to-uniformly-sample-from-multiple-input-files –

+0

これは参考になります彼が提案するソリューションはまだデータセット全体をロードします。クラスがミニバッチで等しく表現されることを確認する問題があるようです。データセット全体をロードすることが現実的でない場合は、ファイル名のキューを維持し、個々のインスタンスをロードすることが最良の方法であると思われます。このシナリオでは、TFRecordは大きな価値を提供していないようです。 – bobw

答えて

3

それはありません - 入力を複数の入力データファイルにシャーディングしてから、それを処理することができます。as explained in this answer

"完璧な"シャッフルに近いものが必要な場合は、それをメモリに読み込む必要がありますが、実際にはほとんどの場合、100または1000ファイルに分割するだけで十分にシャッフルできます。 8〜16ファイル分のデータを保持するのに十分な大きさのシャッフルキューを使用します。

私は、ディスクにこぼれる可能性のあるランダムランダムシャッフルキューを作成するために頭の後ろにかゆみがありますが、それは私の優先順位リストでは非常に低いです - 誰かが貢献したい場合は、それ。 :)

+6

どのようにそれはかゆみですか? +1 – TimZaman

0

実際には、TFRecordsに保存する前にシャッフルについて心配する必要はありません。 TFRecordsを読むには(現在)推奨されている方法はtf.data.TFRecordDatasetで、.shuffle()メソッドを実装しているからです。

+0

実際、私はそれが本当であるかどうかはわかりません。あなたが記述するshuffle()メソッドはローカルのランダム性(キューの容量を越えて)だけを与え、レコード全体ではありません。 – ezfn

+0

私はそれがデータセット全体を使用するとは言いませんでした。しかし、それはまた、キューベースのシャフリングが必要なランダム性を提供するのに十分でないことを意味しません。私はそれがいくつかの実装で使用されているのを見ました。このメソッドが使用されている場合はtensor2tensor repo。 – bartgras

関連する問題