Keras中的1D CNN:从合并特征到密集层的平坦化提高了ValueError



我定义了以下CNN模型。它期望长度为501的1D矢量输入。

model = ml.models.Sequential()
model.add(ml.layers.Conv1D(filters=NUMBER_OF_FILTERS, kernel_size=KERNEL_SIZE, activation=ACTIVATION, input_shape=(None, 501)))
model.add(ml.layers.MaxPooling1D(pool_size=POOL_SIZE, padding='valid'))
model.add(ml.layers.Flatten())
model.add(ml.layers.Dense(HIDDEN_SIZE-1, activation=ACTIVATION))

然而,这引发了一个价值错误:

ValueError: The last dimension of the inputs to `Dense` should be defined. Found `None`.

我不知道为什么Flatten没有创建类似(None, x)的形状,而是创建(None, None)的形状。这里好像出了什么问题?

这是模型摘要:

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv1d (Conv1D)              (None, None, 50)          250550    
_________________________________________________________________
max_pooling1d (MaxPooling1D) (None, None, 50)          0         
_________________________________________________________________
flatten (Flatten)            (None, None)              0         
=================================================================
Total params: 250,550
Trainable params: 250,550
Non-trainable params: 0
_________________________________________________________________

我已经找到了解决方案。我没有正确定义Conv1D层的input_shape,它应该是:

model.add(ml.layers.Conv1D(filters=NUMBER_OF_FILTERS, kernel_size=KERNEL_SIZE, activation=ACTIVATION, input_shape=(501, 1)))

Layers Flatten将图像的格式从二维数组(a,b(转换为一维数组(aXb(。Layer Pooling输出max_pooling1d(MaxPooling1D((None,None,50(为二维数组(0,0(

相关内容

最新更新