我想在每个时代改变我的数据集的一部分。正如在Keras documentation中所写,为了创建回调,我需要创建一个类。所以我从写作开始
class AlterDataset(keras.callbacks.Callback):
def on_epoch_end(self,epoch,logs={}):
#???
但后来我意识到我无法访问模型的数据集。可以使用回调来完成吗?
我也看过this入场,但我不太明白这一点。我已经有了一个模型架构,我使用的是Model,而不是Sequential。
您可以实施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
来适应你的模型。