2017-06-15 15 views
0

私はBig Dataを使用したMLには非常に新しく、以前は犬/猫の分類にKerasの一般的な畳み込みの例を使っていましたが、同様のアプローチを画像セットに適用すると、メモリの問題。Keras畳み込みネットワークを使用したメモリの問題

私のデータセットは、10048×1687ピクセルの非常に長い画像で構成されています。メモリの問題を回避するために、バッチサイズ1を使用して、モデルに一度に1つのイメージをフィードします。

このモデルには2つの畳み込みレイヤーがあり、それぞれのレイヤーに最大プールが続き、完全に接続されたレイヤーの直前に、平坦化レイヤーを約29万入力にします。

しかし、実行直後には、メモリ使用量が制限値(8Gb)を超えます。

1)ローカルのPython(無クラウドの利用)で、このような大きさの計算を処理するための最良のアプローチは何ですか:だから、私の質問は以下の通りです

?私が利用する必要がある追加のPythonライブラリがありますか?

+0

TensorFlowをバックエンドとして使用すると、複数のGPUでネットワークを分割できます。 – Mathias

答えて

1

pythonでyieldが何をするのか、発電機のアイデアを確認してください。初めにすべてのデータを読み込む必要はありません。 batch_sizeを小さくして、メモリエラーが発生しないようにしてください。 あなたのジェネレータは、次のようになります

def generator(fileobj, labels, memory_one_pic=1024, batch_size): 
    start = 0 
    end = start + batch_size 
    while True: 
    X_batch = fileobj.read(memory_one_pic*batch_size) 
    y_batch = labels[start:end] 
    start += batch_size 
    end += batch_size 
    if not X_batch: 
     break 
    if start >= amount_of_datasets: 
     start = 0 
     end = batch_size 
    yield (X_batch, y_batch) 

...後ですでにお使いのアーキテクチャの準備ができているとき...あなたはまた、基本的に高速化し、学ぶのに役立ちますについてbatch_normalizationを、お読みください

train_generator = generator(open('traindata.csv','rb'), labels, batch_size) 
train_steps = amount_of_datasets//batch_size + 1 

model.fit_generator(generator=train_generator, 
        steps_per_epoch=train_steps, 
        epochs=epochs) 

より良い精度で。

0

train_generator()を使用しているときは、パラメータも設定する必要があります。デフォルトでは10に設定されています。これは、1つだけを使用しながら10バッチでロードしていることを意味します(train_generator()は、ネットワークのように遅延する可能性のある外部ソースからのデータをストリーミングするように設計されています。あなたの目的に合わせてmax_q_size=1を設定することをおすすめします。

関連する問題