我的问题是我为100个时代运行了一个keras模型(给定时代= 100),并停止了一段时间以冷却CPU和GPU。我又跑了100个纪元,而损失从前100个纪元停止的地方开始减少。它在所有条件下都能工作吗?就像我要训练模型的时间为1000个周期一样,我是否可以每隔100个周期停止一次,然后等我的CPU和GPU冷却并运行下一个100个周期。我可以这样做吗?
并非在所有情况下都有效。例如,如果您对数据进行混洗并执行如下所示的验证拆分:
fit(x,y,epochs=1, verbose=1, validation_split=0.2, shuffle=True)
您将使用整个数据集进行训练,这不是您期望的。
此外,通过进行多次拟合,您将擦除历史记录信息(每个时期的准确性,损失等),其信息如下:
model.history
因此,某些使用此历史记录的回调函数将无法正常工作,例如EarlyStopping(此处为源代码)。
否则,它可以正常工作,因为它不会像keras优化器(Adadelta优化器)的源代码中所看到的那样混乱。
但是,我不建议您这样做。因为这可能会导致将来开发中的错误。一种更干净的方法是创建一个延迟如下的自定义回调函数:
import time
class DelayCallback(keras.callbacks.Callback):
def __init__(self,delay_value=10, epoch_to_complete=10):
self.delay_value = delay_value # in second
self.epoch_to_complete = epoch_to_complete
def on_epoch_begin(self, epoch, logs={}):
if (epoch+1) % self.epoch_to_complete == 0:
print("cooling down")
time.sleep(self.delay_value)
return
model.fit(x_train, y_train,
batch_size=32,
epochs=20,
verbose=1, callbacks=[DelayCallback()])
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句