dask優れた並列処理能力を提供するため、始めたばかりです。40000ディスク上に、いくつかの DL ライブラリを使用して分類子を構築するために使用する画像がいくつかKerasありTFます。このメタ情報 (画像パスと対応するラベル) を pandas データフレームに収集しました。これは次のようになります。
img_path labels
0 data/1.JPG 1
1 data/2.JPG 1
2 data/3.JPG 5
...
これが私の簡単なタスクです。dask を使用して、画像と対応するラベルをあるlazy方法で読み取ります。画像に対していくつかの処理を行いbatch size、32 の a で分類子にバッチを渡します。
読み取りと前処理のための関数を定義します。
def read_data(idx): img = cv2.imread(data['img_path'].iloc[idx]) label = data['labels'].iloc[idx] return img, label def img_resize(img): return cv2.resize(img, (224,224))遅延 Dask 配列を取得します。
data = [dd.delayed(read_data)(idx) for idx in range(len(df))] images = [d[0] for d in data] labels = [d[1] for d in data] resized_images = [dd.delayed(img_resize)(img) for img in images] resized_images = [dd.array.from_delayed(x, shape=(224,224, 3),dtype=np.float32) for x in resized_images]
ここに私の質問があります:
Q1. この配列からbatchデータを取得するにはどうすればよいですか? batch_size=32これは現在、遅延ジェネレーターと同等ですか? そうでない場合、そのように動作させることはできますか?
Q2. chunksizeより良いバッチ生成のために効果的なものを選択するには? たとえば、4コアがあり、画像のサイズが である場合(224,224,3)、バッチ処理を効率的にするにはどうすればよいですか?