Keras序列模型的可变输入形状
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Keras序列模型的可变输入形状相关的知识,希望对你有一定的参考价值。
我有一个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]]
])
x_train具有变化的维度,这将在训练阶段引起麻烦。如果wer pad额外为零,它会对您的数据产生重大影响吗?如果没有,找出不同尺寸的最大值并相应地构建新阵列,如下面的jupyter笔记本所示:
以上是关于Keras序列模型的可变输入形状的主要内容,如果未能解决你的问题,请参考以下文章