Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将训练数据拆分成更小的批以解决内存错误_Python_Tensorflow_Machine Learning_Keras_Deep Learning - Fatal编程技术网

Python 如何将训练数据拆分成更小的批以解决内存错误

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

我有一个带有两个多维数组的训练数据[prev_句,current_句],当我使用simple model.fit方法时,它给了我记忆错误。我现在想使用fit_generator,但我不知道如何将训练数据拆分成批,以便输入model.fit_generator。训练数据的形状为(1113561261024)和(1113561261024),y_序列形状为(111356,19)。下面是简单拟合方法的代码行


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)