Keras序列模型的可变输入形状

问题描述 投票:0回答:1

我有一个Sequential模型定义如下:

model = Sequential([
    BatchNormalization(axis=1,input_shape=(2,4)),
    Flatten(),
    Dense(256, activation='relu'),       
    BatchNormalization(),
    Dropout(0.1),
    Dense(2, activation='softmax')
])

我想改变这个模型来接受可变形状的输入。具体而言,第一维需要是可变的。阅读specifying the input shape上的Keras文档,我看到你可以在input_shape元组中使用None条目,其中None表示可能需要任何正整数。

使用我现有的模型,如果我将input_shape从(2,4)更改为(None,4),我会收到以下错误:

---> Dense(2, activation='softmax')
TypeError: an integer is required

我不是肯定的,但是当模型包含Flatten()层时,我不相信可以指定变量输入形状。我已经读过Flatten()需要知道输入形状,因此变量输入形状与Flatten()不兼容。如果我删除Flatten()图层,我会收到与上面相同的错误。我不希望这个模型在没有Flatten()层的情况下工作,因为我认为输入在传递给Dense层之前是平坦的。

鉴于此,任何人都可以解释我如何能够利用可变输入形状?如果这里的问题是Flatten()层,那么在传递到Dense图层之前输入应该被展平的情况下,解决这个问题的方法是什么?

提前感谢任何建议。

编辑:举例说明潜在的训练集 - 对于上面显示的带有input_shape =(2,4)的模型,训练集可能如下所示,其中集合中的每个2维阵列都有形状(2, 4):

x_train = np.array([
         [[1, 1.02, 1.3, 0.9], [1.1, 1.2, 0.91, 0.99]], 
         [[1, 1.02, 1.3, 0.9], [1.1, 1.2, 0.91, 0.99]],
         [[1.01 ,1, 1.2, 1.2], [1.3, 1.2, 0.89, 0.98]]
        ])

对于具有input_shape =(None,4)的数据,其中每个数据点的第一维的形状可以变化,第二维固定为4,训练集可能如下所示:

x_train = np.array([
         [[1, 1.02, 1.3, 0.9], [1.1, 1.2, 0.91, 0.99], [1.1, 1.2, 0.91, 0.99]], 
         [[1, 1.02, 1.3, 0.9], [1.1, 1.2, 0.91, 0.99]],
         [[1,1,1,1], [1.3, 1.2, 0.89, 0.98], [1,1,1,1], [1,1,1,1]]
        ])
python neural-network deep-learning keras theano
1个回答
0
投票

x_train具有变化的维度,这将在训练阶段引起麻烦。如果wer pad额外为零,它会对您的数据产生重大影响吗?如果没有,找出不同尺寸的最大值并相应地构建新阵列,如下面的jupyter笔记本所示:Dimension of x_train and x_train2

The way how you pad zeros

© www.soinside.com 2019 - 2024. All rights reserved.