Keras.train_on_batch:为什么我不能提供多个输入?

时间:2019-05-09 09:55:26

标签: python faster-rcnn

我想训练一种对象检测算法,该算法可以在灰度图片中区分两种类型的单元格。我的目标是在输入新图像时,在图片的每个单元格周围用两种不同颜色的边框将其还给我。

我的工作基于本文中找到的代码:https://www.analyticsvidhya.com/blog/2018/11/implementation-faster-r-cnn-python-object-detection/ 我选择Faster_FRCNN是因为该算法最终有望几乎实时运行,并且本文中的应用程序与我的类似。

代码对生成器(data_gen)之外的数据使用keras.train_on_batch:

X.shape =(1,600,803,3)

Y.shape = [(1,38,50,18),(1,38,50,72)]

for epoch_num in range(num_epochs):
      progbar = generic_utils.Progbar(epoch_length)
      while True:
           X, Y, img_data = next(data_gen)
           loss_rpn = model_rpn.train_on_batch(X, Y)
           progbar.update(iter_num+1, [('rpn_cls', losses[iter_num, 0]),('rpn_regr', losses[iter_num, 1]),('detector_cls', losses[iter_num, 2]), ('detector_regr', losses[iter_num, 3])])

如您所见,似乎对于“ epoch_length”的每次迭代仅处理一个火车图像。现在,我将epoch_length固定为我得到的火车图像的数量,但我想给出批次(该函数的用途)。

当我尝试自己构建批处理(for循环使用next(data_gen)的结果)并将其提供给train_on_batch时,我收到错误消息“检查模型输入时出错:要传递的Numpy数组列表到模型的大小不是模型预期的大小。应该看到1个数组,但是得到了[num_imgs]“的以下列表。

我尝试做X = np.array(x),但随后出现另一条错误消息“检查输入时出错:预期input_3具有4个维,但形状为数组([num_imgs],1、600、803、3 )”。

我如何分批训练?

0 个答案:

没有答案