2017-11-15 12 views
0

私はメモリが少ない大規模なデータセットを扱っており、データフレームをDaskに導入しました。 Daskがメモリ全体にデータセットをロードしないというドキュメントから理解したこと。代わりに、オンデマンドでディスクからレコードをフェッチする複数のスレッドを作成しました。だから私はバラのサイズ= 500を持っているケラスモデル、それは訓練時にメモリ内の500レコードを持つ必要があります。しかし、私は訓練を開始します。それは永遠にかかります。私は何か間違ったことをしているかもしれません。トレーニングデータのdaskデータフレームで鍛えるケラスモデル

形状:* 1290 1000000

import glob 
import dask.dataframe 
paths_train = glob.glob(r'x_train_d_final*.csv') 

X_train_d = dd.read_csv('.../x_train_d_final0.csv') 
Y_train1 = keras.utils.to_categorical(Y_train.iloc[,1], num_classes) 
batch_size = 500 
num_classes = 2 
epochs = 5 

model = Sequential() 
model.add(Dense(645, activation='sigmoid', input_shape=(1290,),kernel_initializer='glorot_normal')) 
#model.add(Dense(20, activation='sigmoid',kernel_initializer='glorot_normal')) 
model.add(Dense(num_classes, activation='sigmoid')) 

model.compile(loss='binary_crossentropy', 
      optimizer=Adam(decay=0), 
      metrics=['accuracy']) 

history = model.fit(X_train_d.to_records(), Y_train, 
       batch_size=batch_size, 
       epochs=epochs, 
       verbose=1, 
       class_weight = {0:1,1:6.5}, 
       shuffle=False) 
+0

あなたはcsvファイルをアップロードできますか? – sera

+0

私は開いているプロジェクトに取り組んでいないので、これはできません。 – user3085459

+0

は、csvファイルを記述する。行数および列数。 – sera

答えて

0

あなたは発電機またはSequenceインスタンスにSequential modelからfit_generator()を使用する必要があります。両方とも、データの一部だけをロードする適切な方法を提供します。

Kerasのドキュメントは、優れた例を提供します。

def generate_arrays_from_file(path): 
    while 1: 
     f = open(path) 
     for line in f: 
      # create Numpy arrays of input data 
      # and labels, from each line in the file 
      x, y = process_line(line) 
      yield (x, y) 
     f.close() 

model.fit_generator(generate_arrays_from_file('/my_file.txt'), 
        steps_per_epoch=1000, epochs=10) 
1

今日KerasはDASKのデータフレームまたは配列を認識していません。私はdaskオブジェクトを同等のPandasまたはNumpyオブジェクトに変換するだけであると考えています。

Kerasモデルを段階的にトレーニングできる場合は、dask.delayedといくつかのforループを使用してこの問題を解決できます。

最終的に、KerasプロジェクトとDaskプロジェクトでは、過剰な作業を行わずにこれらのワークロードを容易にするために、互いの詳細を知ることができます。

関連する問題