我定义了以下CNN模型。期望一维矢量输入的长度为501。
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
_________________________________________________________________
答案 0 :(得分:0)
我已经找到解决方案。我没有正确定义Conv1D层的input_shape,应该改为:
model.add(ml.layers.Conv1D(filters=NUMBER_OF_FILTERS, kernel_size=KERNEL_SIZE, activation=ACTIVATION, input_shape=(501, 1)))
答案 1 :(得分:0)
Layerers Flatten将图像的格式从二维数组(a,b)转换为一维数组(aXb).Layer Pooling输出max_pooling1d(MaxPooling1D)(None,None,50)一二维数组(0,0)。因此,图层Flatten:flatten(Flatten)(无,无)