使用Keras回调更改数据集

时间:2019-03-25 15:11:19

标签: python keras

我想在每个时期更改部分数据集。如Keras documentation中所述,为了创建回调,我需要创建一个类。所以我开始写

class AlterDataset(keras.callbacks.Callback):
    def on_epoch_end(self,epoch,logs={}):
        #???

但是后来我意识到我无法访问模型的数据集。可以使用回调完成此操作吗?

我也看到了this条目,但我不太理解。我已经有一个模型架构,并且我使用模型,而不是顺序模型。

1 个答案:

答案 0 :(得分:1)

您可以实现一个Sequence来在训练期间为模型加载数据。它有一个on_epoch_end方法,您可以在下一个时期开始之前更改数据。

一个粗略的例子:

class MySequence(Sequence):

    def __init__(self, batchSize): # you can add parameters here
        self.batchSize = batchSize
        self.xTrain = loadxData() # load your x data here
        self.yTrain = loadyData() # load your y data here

    def __len__(self):
        return self.xData.shape[0]//self.batchSize

    def __getitem__(self, index):
        return self.xTrain[index*self.batchSize:(index+1)*self.batchSize:]

    def on_epoch_end(self):
        self.xTrain, self.yTrain = changeData(self.xTrain, self.yTrain) # change your data here

然后,您可以使用fit_generator拟合模型。