我正在处理内存不足的大型数据集,并介绍了Dask dataframe。我从文档中了解到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)
今天Keras不知道Dask数据帧或数组。我怀疑它只是将dask对象转换为等效的Pandas或Numpy对象。在
如果您的Keras模型可以增量训练,那么您可以使用dask.delayed和一些for循环来解决这个问题。在
最终,看到Keras和Dask项目能够相互了解,从而在不增加工作量的情况下促进这些工作负载,这将是一件好事。在
您应该将
fit_generator()
fromSequential model与生成器或Sequence实例一起使用。两者都提供了一种只加载一部分数据的适当方法。在Keras文档提供了一个很好的例子:
相关问题 更多 >
编程相关推荐