[解決済み] Dataset.map, Dataset.prefetch, Dataset.shuffleにおけるbuffer_sizeの意味するところ
質問
TensorFlowの通り
ドキュメント
では
prefetch
と
map
のメソッドは
tf.contrib.data.Dataset
クラスでは、どちらも
buffer_size
.
については
prefetch
メソッドでは、パラメータは
buffer_size
で、ドキュメントによると :
buffer_size: tf.int64 スカラー tf.Tensor で、プリフェッチ時にバッファリングされる要素の最大数を表します。 プリフェッチ時にバッファリングされる要素数の最大値を表します。
については
map
メソッドでは、パラメータは
output_buffer_size
で、ドキュメントによると :
output_buffer_size: (オプション。) tf.int64スカラー tf.Tensor, バッファリングされる処理済み要素の最大数を表します。 バッファリングされます。
同様に
shuffle
メソッドでも、同じ量が表示され、ドキュメントによると :
buffer_size: tf.int64スカラー tf.Tensorで、このデータセットから新しいデータセットがサンプリングする要素の数を表します。 新しいデータセットがサンプリングするこのデータセットの要素の数を表します。
これらのパラメータはどのような関係にあるのでしょうか?
仮に
Dataset
オブジェクトを以下のように作成するとします。
tr_data = TFRecordDataset(trainfilenames)
tr_data = tr_data.map(providefortraining, output_buffer_size=10 * trainbatchsize, num_parallel_calls\
=5)
tr_data = tr_data.shuffle(buffer_size= 100 * trainbatchsize)
tr_data = tr_data.prefetch(buffer_size = 10 * trainbatchsize)
tr_data = tr_data.batch(trainbatchsize)
どのような役割を担っているかというと
buffer
パラメータはどのような役割を担っているのでしょうか?
どのように解決するのですか?
TL;DR
似たような名前ですが、これらの議論は全く異なる意味を持っています。その
buffer_size
で
Dataset.shuffle()
はデータセットのランダム性に影響を与えるので、要素が生成される順序も変わります。そのため
buffer_size
の中に
Dataset.prefetch()
は、次の要素の生成にかかる時間にのみ影響します。
は
buffer_size
の引数は
tf.data.Dataset.prefetch()
と
output_buffer_size
の引数を
tf.contrib.data.Dataset.map()
を調整する方法を提供します。
パフォーマンス
のバッファを作成するようTensorFlowに指示します。
buffer_size
要素のバッファを作成し、バックグラウンドでそのバッファを埋めるバックグラウンドスレッドを作成するようTensorFlowに指示します。
(なお、ここでは
output_buffer_size
から引数を取り除いたことに注意してください。
Dataset.map()
から移動したときに
tf.contrib.data
から
tf.data
. 新しいコードでは
Dataset.prefetch()
の後に
map()
を追加すると、同じ動作になります)。
プリフェッチバッファを追加することで、データの前処理と下流の計算をオーバーラップさせ、パフォーマンスを向上させることができます。一般的に、パイプラインの一番最後に小さなプリフェッチバッファ(おそらく単一の要素のみ)を追加するのが最も有用ですが、より複雑なパイプラインでは、特に単一の要素を生成する時間が変化し得る場合、追加のプリフェッチから利益を得ることができます。
対照的に
buffer_size
の引数は
tf.data.Dataset.shuffle()
は
ランダム性
に影響を与える。私たちは
Dataset.shuffle()
のような)変換を
tf.train.shuffle_batch()
関数のように) を使って、メモリに収まりきらないほど大きなデータセットを処理します。データセット全体をシャッフルするのではなく,バッファに格納された
buffer_size
要素のバッファを維持し,そのバッファから次の要素をランダムに選択する(次の入力要素がある場合はそれを置き換える).の値を変更すると
buffer_size
の値を変更すると、シャッフルの均一性に影響します。
buffer_size
がデータセットの要素数より大きい場合は、 一様にシャッフルされます。
1
であれば、シャッフルは全く行われません。非常に大きなデータセットの場合、典型的なquot;good enough"アプローチは、学習前に一度データをランダムに複数のファイルに分割し、ファイル名を一様にシャッフルし、その後より小さなシャッフルバッファを使用することである。しかし、適切な選択は、学習作業の正確な性質に依存します。
関連
-
Running tensorflow program prompts Your CPU supports instructions that this TensorFlow binary was not compiled to use:
-
undefined警告 お使いのCPUは、このTensorFlowバイナリが使用するためにコンパイルされていない命令をサポートしています。AVX2
-
TypeError: int() の引数は、文字列、バイトのようなオブジェクト、または数値でなければならず、'map' ではありません。
-
TensorFlowの問題:AttributeError:'NoneType'オブジェクトには'dtype'という属性がない。
-
TensorflowでProcess finished with exit code -1073741819 (0xC0000005)が発生した場合の解決策。
-
tf.get_variable_scope() 共通の使用法
-
GPU版TensorFlowの正常なインストールをテストします。
-
TensorFlow学習 - Tensorflowオブジェクト検出API (win10, CPU)
-
Keras-Yolo v3 のエラーを解決する。AttributeError: モジュール 'keras.backend' には 'control_flow_ops' という属性がありません。
-
[解決済み] TensorFlow、モデル保存後に3つのファイルが存在するのはなぜか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
undefined警告 お使いのCPUは、このTensorFlowバイナリが使用するためにコンパイルされていない命令をサポートしています。AVX2
-
undefinedtensorflowお使いのCPUは、このTensorFlowバイナリが使用するようにコンパイルされていない命令をサポートしています。AVX2
-
undefinedエラーを解決してください。お使いのCPUは、このTensorFlowバイナリが使用するためにコンパイルされていない命令をサポートしています。AVX AVX2
-
EnvironmentErrorのため、パッケージをインストールできませんでした。[Errno 13] パーミッションが拒否された問題を解決しました。
-
TensorFlowの問題:AttributeError:'NoneType'オブジェクトには'dtype'という属性がない。
-
tensorflow Solutionに一致するディストリビューションは見つかりませんでした。
-
tf.get_variable_scope() 共通の使用法
-
TensorFlowプログラムのGPU使用量無制限を解決する。
-
TensorFlowのインストールにpipを使うのをやめ、condaを使う(CPU & GPU)
-
[解決済み] TensorFlow、モデル保存後に3つのファイルが存在するのはなぜか?