Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.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 如何让Keras模型在不同的fit调用中提前停止_Python_Machine Learning_Neural Network_Keras - Fatal编程技术网

Python 如何让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

由于数据维度对于我的任务来说很大,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_LENGTH, 50, 1)
    cls_batch = np.array(cls_batch)

    model.fit(x = sen_batch,y = cls_batch)

    num_iterations += 1
  • 使用:因为您有generator-您可以使用generator traning代替经典的
    fit
    。此方法支持
    回调
    ,因此您可以使用

  • 无法使用
    安装发电机时
    : 因此,首先,您需要使用method-as
    fit
    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
    如果没有改善的话=耐心:
    打破
    
  • 使用:因为您有generator-您可以使用generator traning代替经典的
    fit
    。此方法支持
    回调
    ,因此您可以使用

  • 无法使用
    安装发电机时
    : 因此,首先,您需要使用method-as
    fit
    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
    如果没有改善的话=耐心:
    打破