Python 如何让Keras模型在不同的fit调用中提前停止
由于数据维度对于我的任务来说很大,32个样本将消耗服务器中近9%的内存,其中总可用内存约为105G。所以我必须连续调用fit()以适应循环。我还想通过连续调用fit()提前停止 但是,由于Keras文档中引入的回调方法只适用于一个fit()调用 在这种情况下,我怎么能早点停车 以下是我的代码片段:Python 如何让Keras模型在不同的fit调用中提前停止,python,machine-learning,neural-network,keras,Python,Machine Learning,Neural Network,Keras,由于数据维度对于我的任务来说很大,32个样本将消耗服务器中近9%的内存,其中总可用内存约为105G。所以我必须连续调用fit()以适应循环。我还想通过连续调用fit()提前停止 但是,由于Keras文档中引入的回调方法只适用于一个fit()调用 在这种情况下,我怎么能早点停车 以下是我的代码片段: for sen_batch, cls_batch in train_data_gen: sen_batch = np.array(sen_batch).reshape(-1, WORD_LE
for sen_batch, cls_batch in train_data_gen:
sen_batch = np.array(sen_batch).reshape(-1, WORD_LENGTH, 50, 1)
cls_batch = np.array(cls_batch)
model.fit(x = sen_batch,y = cls_batch)
num_iterations += 1
fit
。此方法支持回调
,因此您可以使用安装发电机时
:
因此,首先,您需要使用method-asfit
call重置许多模型状态(例如优化器状态)
train\u on\u batch
方法返回一个损失值,但不接受回调。因此,您需要自行实施提前停止
。你可以这样做,例如:
from six import next
patience = 4
best_loss = 1e6
rounds_without_improvement = 0
for epoch_nb in range(nb_of_epochs):
losses_list = list()
for batch in range(nb_of_batches):
x, y = next(train_data_gen)
losses_list.append(model.train_on_batch(x, y))
mean_loss = sum(losses_list) / len(losses_list)
if mean_loss < best_loss:
best_loss = mean_loss
rounds_witout_improvement = 0
else:
rounds_without_improvement +=1
if rounds_without_improvement == patience:
break
从六个导入下一个
耐心=4
最佳损耗=1e6
没有改善的四舍五入=0
对于范围内的历元(历元中的历元):
损失列表=列表()
对于范围内的批次(批次中的nb批次):
x、 y=下一个(列车数据生成)
损失清单。追加(批量(x,y)上的型号系列)
平均损失=总和(损失清单)/长度(损失清单)
如果平均损失<最佳损失:
最佳损失=平均损失
四舍五入,无改善=0
其他:
四舍五入,无改善+=1
如果没有改善的话=耐心:
打破
fit
。此方法支持回调
,因此您可以使用安装发电机时
:
因此,首先,您需要使用method-asfit
call重置许多模型状态(例如优化器状态)
train\u on\u batch
方法返回一个损失值,但不接受回调。因此,您需要自行实施提前停止
。你可以这样做,例如:
from six import next
patience = 4
best_loss = 1e6
rounds_without_improvement = 0
for epoch_nb in range(nb_of_epochs):
losses_list = list()
for batch in range(nb_of_batches):
x, y = next(train_data_gen)
losses_list.append(model.train_on_batch(x, y))
mean_loss = sum(losses_list) / len(losses_list)
if mean_loss < best_loss:
best_loss = mean_loss
rounds_witout_improvement = 0
else:
rounds_without_improvement +=1
if rounds_without_improvement == patience:
break
从六个导入下一个
耐心=4
最佳损耗=1e6
没有改善的四舍五入=0
对于范围内的历元(历元中的历元):
损失列表=列表()
对于范围内的批次(批次中的nb批次):
x、 y=下一个(列车数据生成)
损失清单。追加(批量(x,y)上的型号系列)
平均损失=总和(损失清单)/长度(损失清单)
如果平均损失<最佳损失:
最佳损失=平均损失
四舍五入,无改善=0
其他:
四舍五入,无改善+=1
如果没有改善的话=耐心:
打破