2017-11-15 19 views
0

메모리가 부족한 대형 데이터 세트로 작업하고 있으며 데이터 프레임을 Dask에 소개했습니다. Dask가 전체 데이터 세트를 메모리에로드하지 않는다는 것을 문서에서 알 수 있습니다. 대신 여러 스레드를 생성하여 필요시 디스크에서 레코드를 가져옵니다. 따라서 배치 크기 = 500 인 케라 모델을 가정 할 때 교육 시간에 메모리에 500 개의 레코드 만 있어야합니다. 그러나 내가 훈련을 시작할 때. 영원히 걸립니다. 내가 뭔가 잘못하고있는 것일 수도 있습니다. 제안 해주십시오. 훈련 데이터의dask 데이터 프레임을 사용하여 훈련하기에 앞장서는 Keras 모델

모양 : 1000000 * 1290

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()을 사용해야합니다. 둘 다 데이터의 일부만로드하는 적절한 방법을 제공합니다.

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의 dataframes 또는 배열에 대해 알고하지 않습니다

Keras의 문서가 좋은 예를 제공합니다. 그 대신 dask 객체를 동등한 Pandas 또는 Numpy 객체로 변환하는 것으로 의심됩니다.

Keras 모델을 점진적으로 학습 할 수 있다면 dask.delayed과 for 루프를 사용하여이 문제를 해결할 수 있습니다.

결국 Keras 및 Dask 프로젝트가 과도한 작업없이 이러한 작업을 용이하게하기 위해 서로에 대해 자세히 알면 좋을 것입니다.