Python 数据发生器Keras中的模型预测

Python 数据发生器Keras中的模型预测,python,keras,multiprocessing,Python,Keras,Multiprocessing,我正在研究一个Keras模型,图像被分割成补丁 我有一条非常奇特的管道: for i in range(n_iteration): print("Epoch:", i, "/", n_iteration) start = time.time() self.train_batch, self.validation_batch = self.get_batch() end = time.time() print("Tim


我正在研究一个Keras模型,图像被分割成补丁

我有一条非常奇特的管道:

for i in range(n_iteration):
        print("Epoch:", i, "/", n_iteration)
        start = time.time()
        self.train_batch, self.validation_batch = self.get_batch()
        end = time.time()
        print("Time for loading: ",end - start)
        K.set_value(self.batch_source, self.train_batch[0][:self.batch_size])
        K.set_value(self.batch_target, self.train_batch[0][self.batch_size:])

        pred = self.model.predict(self.train_batch[0])

        K.set_value(self.gamma, self.compute_gamma(pred))

        hist = self.model.train_on_batch(self.train_batch[0], self.train_batch[1])
我需要根据我的模型在时间t(对于给定批次)的预测计算一个名为gamma的特定值。这个值在我的损失函数中被考虑,但不可微,因此我不能将它的计算集成到我的损失函数中。

当测量装载和训练所需的时间时,瓶颈似乎在装载阶段。
我的问题是:在计算另一批的预测、gamma和训练时,是否可以加载几个批(self.get_batch()函数)?

我想我的想法应该是创建某种队列,在其中存储批次,但我真的不知道如何做到这一点。

PS:在我的get_批处理函数中,我正在访问一个hdf5文件,它会在多处理中引起任何问题吗


提前感谢。

您看过fit_generator了吗?它支持使用多个辅助进程来并行读取数据。这意味着该类调用数据生成器:。即使使用单个辅助进程(默认)它与计算图形的执行并行运行生成器。的确,我有,但问题是我想跟踪我的批次。在每个训练步骤之前,我需要计算批次的预测。我认为我无法将其集成到批次生成器中,是不是我错了?编写一个自定义生成器以返回gamma以及Y。编写一个自定义损失函数,使用gamma和Y来计算损失。我第二个@ManojMohan建议:使用生成器和自定义损失函数。即使对于自定义损失,您也不必再次计算预测。损失函数将传递预测值。但是计算遗憾的是,我的gamma的属性无法区分(对不起,我忘了澄清这一点)您是否查看了fit_generator?它支持使用多个辅助进程来并行读取数据。这意味着该类调用数据生成器:。即使只有一个辅助进程(默认)它与计算图形的执行并行运行生成器。的确,我有,但问题是我想跟踪我的批次。在每个训练步骤之前,我需要计算批次的预测。我认为我无法将其集成到批次生成器中,是不是我错了?编写一个自定义生成器以返回gamma以及Y。编写一个自定义损失函数,使用gamma和Y来计算损失。我第二个@ManojMohan建议:使用生成器和自定义损失函数。即使对于自定义损失,您也不必再次计算预测。损失函数将传递预测值。但是计算遗憾的是,我的伽马射线无法区分(对不起,我忘了澄清这一点)