Python 使用dask数据帧对服务器进行训练的Keras模型

Python 使用dask数据帧对服务器进行训练的Keras模型,python,dataframe,keras,large-data,dask,Python,Dataframe,Keras,Large Data,Dask,我正在处理内存不足的大型数据集,并被介绍到Dask数据帧。我从文档中了解到Dask不会将整个数据集加载到内存中。相反,它创建了多个线程,这些线程将根据需要从磁盘获取记录。所以我假设批量大小为500的keras模型,在训练时内存中应该只有500条记录。但是当我开始训练的时候。这需要很长时间。可能是我做错了什么。请建议 训练数据形状:1000000*1290 import glob import dask.dataframe paths_train = glob.glob(r'x_train_d_f

我正在处理内存不足的大型数据集,并被介绍到Dask数据帧。我从文档中了解到Dask不会将整个数据集加载到内存中。相反,它创建了多个线程,这些线程将根据需要从磁盘获取记录。所以我假设批量大小为500的keras模型,在训练时内存中应该只有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)

您应该将中的
fit\u 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)

今天,Keras不知道Dask数据帧或阵列。我怀疑它只是将dask对象转换为等效的Pandas或Numpy对象

如果您的Keras模型可以增量训练,那么您可以使用和一些for循环来解决这个问题


最后,看到Keras和Dask项目相互了解更多信息,从而在无需额外工作的情况下促进这些工作负载,这将是一件好事。

您能上传csv文件吗?这将是不可能的,因为我没有在一个开放的项目上工作。然后描述csv文件。行数和列数。同时添加完整代码。添加完整代码和尺寸。回答非常好!这正是我所需要的,而不必过度使用其他各种库!