我必须在Keras中建立一种特殊的神经网络,该神经网络在层的某个点接受具有N行和每行5个元素的多维数组。让我们将此多维数组称为 bboxes 。 bboxes 如下:
[[ 0, x1, x2, y1, y2] # row 0
...
[ 0, x1, x2, y1, y2]] # row N
因此,如您所见,行数是不确定的。我们所知道的是它是一个充满行的数组,其中每行包含 5 个整数。
因此,我可以为 bboxes 创建以下输入:
from keras.layers import Input
bboxes = Input(shape=(None, 5), dtype='int32', name='bboxes')
我必须将 bboxes 传递到名为 MyLayer 的自定义图层,在某些调用方法中,该图层需要获取 bboxes 中的行数>:
from keras.engine.topology import Layer
class MyLayer(Layer):
def __init__(self):
...
...
def call(x):
...
N = x.shape[0] # Get amount of rows (N) of bboxes
...
...
但是,您可能已经知道,Keras具有一种特定类型的体系结构,该体系结构首先由空的形状对象定义。
在编译模型后传递实际的整数N
值。因此,它返回N
而不是整数?
,它基本上是一个空张量...
但是N = x.shape[0]
作为整数的变量对于MyLayer
正常工作很重要。我可能会做类似range(0, N)
的操作,它将返回以下错误:
TypeError:int应该返回int对象
当涉及到此类问题时,我对Keras功能API感到非常困惑。我可以通过任何巧妙的方式将具有任意定义的行数(bboxes
)的数组N
传递到MyLayer
,以后再使用N
的实际值吗?
简而言之,我如何将形状为(N,5)的输入传递给图层,以便该图层知道N的确切数量?
如果有任何解决方法,我将不胜感激。谢谢!