这是我的意见
x_train.shape # (12, 7) 12 observations each of length 7
x_train # dtype('int32')
这是我想要实现的架构:
我想要一个大小为3的内核在序列上进行卷积 . 来自https://keras.io/layers/convolutional/的keras文档
“当使用该层作为模型中的第一层时,提供一个input_shape参数(整数或无元组,例如(10,128),用于128个向量的10个向量的序列,或者(无,128)用于变量 - 128维向量的长度序列 . “
老实说,我很难理解他们的逻辑 . 这是我的尝试
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 回答
正如错误消息所示,您的输入是二维的,而卷积层需要三维输入 .
有以下几点
代替
Keras接受该模型 . 基本上,这会为输入添加一个大小为1的维度(错误消息中的三个维度包括可以认为是前面的
shape
参数的小批量维度) .cnn_model.summary()
然后给出:在准备实际输入数据时,您可能必须将大小为1的维度添加到输入数据中 . 你可能想要使用
numpy.atleast_2d()
或numpy.atleast_3d()
,可能与转置相结合或使用numpy.expand_dims()
.在您的情况下,
np.atleast_3d(x_train)
的形状为(12, 7, 1)
.