首页 文章

Keras模型带着forerver用dask数据帧进行训练

提问于
浏览
1

我正在处理具有低内存的大型数据集,并且我已经介绍了Dask数据帧 . 我从文档中了解到Dask没有将整个数据集加载到内存中 . 相反,它创建了多个线程,这些线程将根据需要从磁盘中获取记录 . 所以我认为keras模型的批量大小= 500,在训练时它应该只有500条记录在内存中 . 但是当我开始训练的时候 . 它需要永远 . 可能我做错了 . 请建议 .

训练数据形状: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)

2 回答

  • 4

    今天Keras不了解Dask数据帧或数组 . 我怀疑它只是将dask对象转换为等效的Pandas或Numpy对象 .

    如果您的Keras模型可以逐步训练,那么您可以使用dask.delayed和一些for循环解决此问题 .

    最终,很高兴看到Keras和Dask项目更多地了解彼此,以便在没有过多工作的情况下促进这些工作负载 .

  • 1

    您应该使用 fit_generator() 来自Sequential model与生成器或Sequence实例 . 两者都提供了仅加载一部分数据的正确方法 .

    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)
    

相关问题