Python 如何将训练数据拆分成更小的批以解决内存错误
我有一个带有两个多维数组的训练数据[prev_句,current_句],当我使用simple model.fit方法时,它给了我记忆错误。我现在想使用fit_generator,但我不知道如何将训练数据拆分成批,以便输入model.fit_generator。训练数据的形状为(1113561261024)和(1113561261024),y_序列形状为(111356,19)。下面是简单拟合方法的代码行Python 如何将训练数据拆分成更小的批以解决内存错误,python,tensorflow,machine-learning,keras,deep-learning,Python,Tensorflow,Machine Learning,Keras,Deep Learning,我有一个带有两个多维数组的训练数据[prev_句,current_句],当我使用simple model.fit方法时,它给了我记忆错误。我现在想使用fit_generator,但我不知道如何将训练数据拆分成批,以便输入model.fit_generator。训练数据的形状为(1113561261024)和(1113561261024),y_序列形状为(111356,19)。下面是简单拟合方法的代码行 history=model.fit([previous_sentences, current
history=model.fit([previous_sentences, current_sentences], y_train,
epochs=15,batch_size=256,
shuffle = False, verbose = 1,
validation_split=0.2,
class_weight=custom_weight_dict,
callbacks=[early_stopping_cb])
我从未使用过fit_generator和data generator,因此我不知道如何将这些训练数据拆分为fit_generator。有人能帮助我使用fit_generator创建批吗?您只需拨打:
model.fit_generator(generator, steps_per_epoch)
其中,steps\u per\u epoch
通常是ceil(num\u samples/batch\u size)
(),而generator
是一个python生成器,它迭代数据并批量生成数据。然后,对生成器的每次调用都应产生batch\u size
许多元素。生成器()的一个示例:
由于这是绝对特定于问题的,因此您必须编写自己的生成器,尽管使用此模板应该很简单。这是将培训数据拆分为小批量的数据生成器:
def generate_data(X1,X2,Y,batch_size):
p_input=[]
c_input=[]
target=[]
batch_count=0
for i in range(len(X1)):
p_input.append(X1[i])
c_input.append(X2[i])
target.append(Y[i])
batch_count+=1
if batch_count>batch_size:
prev_X=np.array(p_input,dtype=np.int64)
cur_X=np.array(c_input,dtype=np.int64)
cur_y=np.array(target,dtype=np.int32)
print(len(prev_X),len(cur_X))
yield ([prev_X,cur_X],cur_y )
p_input=[]
c_input=[]
target=[]
batch_count=0
return
这里是fit_生成器函数调用,而不是model.fit方法:
batch_size=256
epoch_steps=math.ceil(len(previous_sentences)/ batch_size)
hist = model.fit_generator(generate_data(previous_sentences,current_sentences, y_train, batch_size),
steps_per_epoch=epoch_steps,
callbacks = [early_stopping_cb],
validation_data=generate_data(val_prev, val_curr,y_val,batch_size),
validation_steps=val_steps, class_weight=custom_weight_dict,
verbose=1)
我是否必须为每个训练数组编写此数据生成器代码,例如以前的句子和当前的句子,以及我将如何处理要在运行时使用model.fit方法拆分的验证拆分数据您应该检查API,并可能寻找一些示例,有一个参数用于验证数据。如果您有两个输入到网络,生成器将同时返回这两个输入,请参见您是否可以检查generate_data方法,还有一件事我们还必须将此方法应用于验证数据,或者他们不需要它@runDOSrunI创建了一个生成器函数,将训练数据拆分为批量大小的批次,我还将生成器函数应用于验证数据,但在训练期间,模型仅显示训练损失和训练精度,既不显示验证损失,也不显示验证精度。原因是什么?
batch_size=256
epoch_steps=math.ceil(len(previous_sentences)/ batch_size)
hist = model.fit_generator(generate_data(previous_sentences,current_sentences, y_train, batch_size),
steps_per_epoch=epoch_steps,
callbacks = [early_stopping_cb],
validation_data=generate_data(val_prev, val_curr,y_val,batch_size),
validation_steps=val_steps, class_weight=custom_weight_dict,
verbose=1)