2017-07-16 13 views
3

トレーニングデータセットが大きすぎてメモリに収まらないため、コードは一度にディスクから1,000レコードしか読み込みません。今度はTensorflowの新しいDataset APIを使用したいと思います。データセットAPIにより、メモリに保持するレコード数を指定できますか、Tensorflowは自動的にメモリを管理しますので、これを行う必要はありません。TensorflowのデータセットAPIでのメモリ管理

+0

質問を再訪しました。 shuffleとの組み合わせでBatch_sizeは確実に機能します。 –

答えて

1

batch_sizeでレコード数を指定する場合は、この場合、TFはファイルからbatch_size要素だけを取得します。 shuffleを指定することもできます。これにより、メモリ内のすべての時間が最大でbuffer_size要素になることが保証されます。

私のtfrecordsファイルで確認しました。私は100のtfrecordsファイルを持っています、それらのそれぞれ〜10Gb(私のラップトップ上のメモリ以上)です。そして、すべて正常に動作します。

+0

私が何か見落としていない限り、ドキュメントは単にバッチと言っています。「このデータセットの連続した要素をバッチにまとめます」私はメモリ管理やデータがディスクからどのように読み込まれるかについて何も見ていませんでした。また、これまでデータセットがキューを置き換えていることがわかりました。たとえば、この問題を参照してください。https://github.com/tensorflow/tensorflow/issues/7951#issuecomment-303744600 – user554481

+0

@ user554481うわー、知らなかったそれ。これはデータセットを見て初めてのことで、これはちょうどヘルパーだと思っています。ありがとうございました –

2

はい。公式ガイド(TensorFlow入力パイプラインのためのデータセットのAPIを使用して、https://www.tensorflow.org/programmers_guide/datasets)から例

filenames = ["/var/data/file1.tfrecord", "/var/data/file2.tfrecord"] 
dataset = tf.contrib.data.TFRecordDataset(filenames) 
dataset = dataset.map(...) ## Parsing data with a user specified function 
dataset = dataset.shuffle(buffer_size=10000) ## 10000: size of sample/record pool for random selection 
dataset = dataset.batch(32) ## 32: number of samples/records per batch (to be read into memory) 
dataset = dataset.repeat() ## None: keep repeating