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