我在Keras中使用了一个Conv1D层,卷积核大小为3,步长为1。当我尝试处理输入大小为5时会出现以下错误,但在输入大小为6时一切正常。
InvalidArgumentError (see above for traceback): Computed output size would be negative:-1 [input_size: 0, effective_filter_size: 3, stride: 1]
我原以为大小为3的卷积核至少需要大小为3的输入。
编辑:这是模型,输入大小是可变的,我的问题出现在输入大小为5时。
model = Sequential()model.add(Conv1D( input_shape=(None, 4), filters=64, kernel_size=3, activation='relu'))model.add(Conv1D( filters=32, kernel_size=3, activation='relu'))model.add(Conv1D( filters=16, kernel_size=2, activation='relu'))model.add(GlobalMaxPooling1D())model.add(Dense(number_of_classes))model.add(Softmax(axis=-1))model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
回答:
为了确保输出特征图的大小与输入特征图相同,您需要使用’same’填充来填充输入。
model.add(Conv1D( input_shape=(None, 4), filters=64, kernel_size=3, activation='relu', padding='same'))