Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.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 自定义epoch循环中的Keras回调_Python_Tensorflow_Keras - Fatal编程技术网

Python 自定义epoch循环中的Keras回调

Python 自定义epoch循环中的Keras回调,python,tensorflow,keras,Python,Tensorflow,Keras,我使用keras训练LSTM。输入序列的长度不同。假设序列的长度介于1和num_seq之间。因此,我在每个历元中按长度对序列进行分组,以便使用批量大小>1: for epoch in xrange(nb_epochs): for i in range(1,num_seq): X,y = get_sequences(length=i) model.fit(X,y,batch_size=100,epochs=1, validation_split=0.1, callbacks=None)

我使用keras训练LSTM。输入序列的长度不同。假设序列的长度介于1和
num_seq
之间。因此,我在每个历元中按长度对序列进行分组,以便使用批量大小>1:

for epoch in xrange(nb_epochs):
 for i in range(1,num_seq):
  X,y = get_sequences(length=i)
  model.fit(X,y,batch_size=100,epochs=1, validation_split=0.1, callbacks=None)

因为我在历元上使用自定义循环,所以使用历元信息的回调无法正常工作(例如,tensorboard、history等)。解决这个问题的办法是什么?有没有一种方法可以告诉fit函数它目前使用的是哪个历元?

在训练期间对训练数据进行操作时,您应该使用
模型。在批上以增量方式进行训练,或者更好的是,使用它可以定义一个python生成器,为每个批生成
(x,y)
元组。然后,这也会处理回调的正确调用

例如:

def train_gen():
   while True:
       for i in range(1,num_seq):
           X,y = get_sequences(length=i)
           yield X, y
model.fit_generator(train_gen, steps_per_epoch=num_seq)

这样做的缺点是,您必须自己进行批处理,还必须自己提供验证拆分,您也可以使用生成器进行此操作(因此您可以重用大部分代码)。

您是否尝试过
fit
方法的
initial\u epoch
参数?也许这正是你需要的。我认为如果你想恢复训练,初始历元是有效的。如果你想训练100个历元,在50后停下来,然后继续,那么你应该将初始历元设置为50(或51)。然而,我认为只有在
epochs
initial\u epoch
的情况下,这种方法才有效。我想,设置initial\u epoch并不考虑改变学习率。使用
model.train\u batch()而不是
model.fit
()有什么好处?fit generator方法看起来很有前途。谢谢你的提示!