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建议:使用生成器和自定义损失函数。即使对于自定义损失,您也不必再次计算预测。损失函数将传递预测值。但是计算遗憾的是,我的伽马射线无法区分(对不起,我忘了澄清这一点)