Deep learning Keras:多个大型数据集的批量培训

Deep learning Keras:多个大型数据集的批量培训,deep-learning,keras,Deep Learning,Keras,这个问题涉及到在KERA中对多个大文件进行训练的常见问题,这些文件联合起来太大,不适合GPU内存。 我正在使用Keras 1.0.5,我想要一个不需要1.0.6的解决方案。 fchollet描述了一种实现这一点的方法 和 : 然而,我担心模型的状态不会被保存,而是模型不仅在历代之间,而且在数据集之间被重新初始化。每个“历元1/1”代表以下不同数据集上的培训: ~~~~~~~0~~~~~~ 纪元1/1 295806/295806[==================================

这个问题涉及到在KERA中对多个大文件进行训练的常见问题,这些文件联合起来太大,不适合GPU内存。 我正在使用Keras 1.0.5,我想要一个不需要1.0.6的解决方案。 fchollet描述了一种实现这一点的方法 和 :

然而,我担心模型的状态不会被保存,而是模型不仅在历代之间,而且在数据集之间被重新初始化。每个“历元1/1”代表以下不同数据集上的培训:

~~~~~~~0~~~~~~

纪元1/1 295806/295806[===================================================]-13秒-损失:15.7517
纪元1/1 407890/407890[=========================================================]-19s-损失:15.8036
纪元1/1 383188/383188[==================================================================-19s-损失:15.8130
~~~~~~~时代1~~~~~~

纪元1/1 295806/295806[================================================]-14秒-损失:15.7517
纪元1/1 407890/407890[===================================================]-20秒-损失:15.8036
纪元1/1 383188/383188[=============================================]-15秒-损失:15.8130

我知道可以使用model.fit_generator,但由于上述方法被反复建议作为批量培训的一种方式,我想知道我做错了什么

谢谢你的帮助


Max

我已经有一段时间没有遇到这个问题了,但我记得我用过
,即
model=Sequential();型号.安装发电机(…)

示例性代码段(应该是自解释的)


您是否尝试过通过将大文件分为小块在CPU上运行实验?非常确定您需要使用fit_generator,请参阅bump,任何一个?使用fit_生成器似乎不是最短的方法。如果训练数据在一个文件中,该如何处理?我可以加载它,但由于资源错误,无法生成3层。只需将其拆分为几个文件,或者这是不可能的?您好@tenticon,我有一个关于您上一个代码的查询。它是按每个批次编号历元进行训练,还是在一个历元中训练所有批次,然后再进行第二个历元训练?确保.py文件位于python可访问的目录中。将其放在存储笔记本的同一目录中。
# Create generator that yields (current features X, current labels y)
def BatchGenerator(files):
    for file in files:
        current_data = pickle.load(open("file", "rb"))
        X_train = current_data[:,:-1]
        y_train = current_data[:,-1]
        yield (X_train, y_train)

# train model on each dataset
for epoch in range(n_epochs):
    for (X_train, y_train) in BatchGenerator(files):
        model.fit(X_train, y_train, batch_size = 32, nb_epoch = 1)
def generate_batches(files, batch_size):
   counter = 0
   while True:
     fname = files[counter]
     print(fname)
     counter = (counter + 1) % len(files)
     data_bundle = pickle.load(open(fname, "rb"))
     X_train = data_bundle[0].astype(np.float32)
     y_train = data_bundle[1].astype(np.float32)
     y_train = y_train.flatten()
     for cbatch in range(0, X_train.shape[0], batch_size):
         yield (X_train[cbatch:(cbatch + batch_size),:,:], y_train[cbatch:(cbatch + batch_size)])

model = Sequential()
model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy'])

train_files = [train_bundle_loc + "bundle_" + cb.__str__() for cb in range(nb_train_bundles)]
gen = generate_batches(files=train_files, batch_size=batch_size)
history = model.fit_generator(gen, samples_per_epoch=samples_per_epoch, nb_epoch=num_epoch,verbose=1, class_weight=class_weights)