Simple Conv1D as first layer in keras
这是我的意见
1 2 | x_train.shape # (12, 7) 12 observations each of length 7 x_train # dtype('int32') |
这是我想要实现的架构:
我想要一个大小为3的内核卷积整个序列。 从位于https://keras.io/layers/convolutional/的keras文档中
"当将此层用作模型中的第一层时,请提供一个input_shape参数(整数元组或None,例如对于10个向量的128维向量的序列,为(10,128),对于变量-为(-None,128)- 128维向量的长度序列。"
老实说,我很难理解他们的逻辑。 这是我的尝试
1 2 3 4 5 6 7 8 9 10 | docs_sequence = Input(shape=(7,), dtype='float32') # Longest document is 7 words convolution = Conv1D(filters = 1, # only 1 convolution kernel_size = 3, # tri grams strides = 1, input_shape = (1, 7), padding = 'valid', activation = 'relu')(docs_sequence) output = Dense(1, activation='sigmoid')(convolution) cnn_model = Model(inputs = docs_sequence, outputs = [output]) cnn_model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) |
而且我一直都在
ValueError:输入0与层conv1d_30不兼容:预期ndim = 3,找到的ndim = 2
如错误消息所述,您的输入是二维的,而卷积层需要一个三维的输入。
随着以下
1 | docs_sequence = Input(shape=(7,1), ... |
代替
1 | docs_sequence = Input(shape=(7,), ... |
Keras接受该模型。 基本上,这会在输入中增加一个尺寸为1的尺寸(错误消息的三个尺寸包括minibatch尺寸,您可以认为该尺寸位于上述
1 2 3 4 5 6 7 8 9 | _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= input_1 (InputLayer) (None, 7, 1) 0 _________________________________________________________________ conv1d_1 (Conv1D) (None, 5, 1) 4 _________________________________________________________________ dense_1 (Dense) (None, 5, 1) 2 ================================================================= |
在准备实际的输入数据时,可能必须将尺寸为1的此维添加到输入数据中。 为此,您可能要使用
在您的情况下,