首页 文章

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

提问于
浏览
0

我有一个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图层之前输入应该被展平的情况下,解决这个问题的方法是什么?

提前感谢任何建议 .

Edit: 给出一个潜在训练集的示例 - 对于上面显示的带有input_shape =(2,4)的模型,训练集可能如下所示,其中集合中的每个二维阵列都具有形状(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]]
        ])

1 回答

  • 0

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

    The way how you pad zeros

相关问题