tf.dataset
が本当にgreateしていて、2倍の速度で学習することができました。しかし、私はまだパフォーマンスの問題がある、GPUの利用は低いです(tf.dataset
複数の労働者との使用にもかかわらず)。 私のユースケースは以下の通りです:訓練例のTF Apiデータセット:初期化
- 〜400を、それぞれが10個の入力チャネルを持っている(〜5ギガバイトを取る)
タスクがResNet50を使用してセグメンテーションです。前方 - 後方は約0.15秒かかる。バッチサイズ= 32
データの読み込みは高速で、約0.06秒かかります。
私の質問です:各エポック後に初期化を排除し、データを連続してフィードするだけのオプションはありますか?
私はdataset.repeat(10)
を設定しようとしていましたが、役に立たないです。
ロードコードと列車はここにある:https://gist.github.com/melgor/0e681a4fe8f125d25573aa30d8ace5f3
モデルは、画像分割のためのEcnoderデコーダアイデアに変換だけResNetです。コードの大部分はhttps://github.com/argman/EASTから取得されていますが、ここでは読み込みが非常に遅いため、TfRecordsに変換したいと思います。
それはソースを見ずに、このような質問に答えるのは難しいです。私は最近、データセットを使って遊んでいて、dataset.repeat()は毎回イテレータを再初期化するのではなく、移動する方法です。しかし、あなたはパイプラインのどこにrepeat()をしているのか注意する必要があります。 –
答えをありがとう。デバッグに便利なコードを追加しました。現在、この問題を解決する方法があるかどうかはわかりません。 – melgor89
batch()の前にrepeat()を移動し、repeat()を使用してトレーニングのエポック数を制御するので、初期化可能なイテレータの代わりに1回のイテレータを使用できます。 –