Python 使用CV网格搜索的Keras回调

Python 使用CV网格搜索的Keras回调,python,keras,Python,Keras,我正在尝试实现CV网格搜索,以优化Keras模型的超参数。以下是我的代码(运行时没有错误,但无法正确处理回调): 我在回拨时遇到问题: 为每个参数组合的每个CV折叠保存最佳模型 正确记录每个参数组合 任何帮助都将不胜感激 似乎无法正确检查带有CV的模型。但是,如果所有内容都已记录,则可以解析文件并找到最佳参数。以下是它是如何完成的: 定义一个类,该类指定在结束时执行的操作: class LossHistory(keras.callbacks.Callback): def on_train

我正在尝试实现CV网格搜索,以优化Keras模型的超参数。以下是我的代码(运行时没有错误,但无法正确处理回调):

我在回拨时遇到问题:

  • 为每个参数组合的每个CV折叠保存最佳模型
  • 正确记录每个参数组合
    任何帮助都将不胜感激

    似乎无法正确检查带有CV的模型。但是,如果所有内容都已记录,则可以解析文件并找到最佳参数。以下是它是如何完成的:

    定义一个类,该类指定在结束时执行的操作:

    class LossHistory(keras.callbacks.Callback):
        def on_train_begin(self, logs={}):
            self.losses = []
    
        def on_epoch_end(self, batch, logs={}):
            with open('somefile.txt', 'a') as f:
                stats = []
                stats.append(str(batch))
                stats.append('Optimizer,' + self.model.optimizer.__class__.__name__)
                stats.append('Batch_size,' + str(self.params['batch_size']))
                stats.append('accuracy,'+str(logs.get('accuracy')))
                stats.append('val_loss,'+str(logs.get('val_loss')))
                f.write(','.join(stats)+'\n')
    
    然后初始化历史对象并将其添加到回调列表:

    history = LossHistory()
    grid = GridSearchCV(estimator=model,cv=5, param_grid=param_grid, n_jobs=-1)
    grid_result = grid.fit(xMat, yMat,validation_split = 0.1,callbacks=[history]) 
    
    根据您的需要以及文件的格式修改
    LossHistory
    类中需要捕获的参数(这只是一个示例)

    history = LossHistory()
    grid = GridSearchCV(estimator=model,cv=5, param_grid=param_grid, n_jobs=-1)
    grid_result = grid.fit(xMat, yMat,validation_split = 0.1,callbacks=[history])