Python 简单Conv1D作为keras中的第一层

Python 简单Conv1D作为keras中的第一层,python,tensorflow,keras,Python,Tensorflow,Keras,这是我的意见 x_train.shape # (12, 7) 12 observations each of length 7 x_train # dtype('int32') 以下是我想要实现的体系结构: 我想要一个大小为3的内核在序列上卷积。来自keras文档,网址为 “当使用此层作为模型中的第一层时,请为128维向量的10个向量序列提供输入形状参数(整数元组或无,例如:(10,128),或为128维向量的可变长度序列提供输入形状参数(无,128)。” 老实说,我很难理解他们的逻辑。这是

这是我的意见

x_train.shape # (12, 7) 12 observations each of length 7
x_train # dtype('int32')
以下是我想要实现的体系结构:

我想要一个大小为3的内核在序列上卷积。来自keras文档,网址为

“当使用此层作为模型中的第一层时,请为128维向量的10个向量序列提供输入形状参数(整数元组或无,例如:(10,128),或为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

正如错误消息所述,您的输入是二维的,而卷积层预期是三维输入

有以下几点

docs_sequence = Input(shape=(7,1), ...
而不是

docs_sequence = Input(shape=(7,), ...
Keras接受该模型。基本上,这会在输入中添加一个大小为1的维度(错误消息中的三个维度包括minibatch维度,人们可以认为该维度在上面的
shape
参数前面)

cnn\u model.summary()
然后给出:

_________________________________________________________________
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的维度添加到您的输入数据中。您可能需要使用
numpy.atleast_2d()
numpy.atleast_3d()
进行此操作,可能需要结合转置或使用
numpy.expand_dims()


在你的例子中,
np。至少\u 3d(x\u train)
给出了一个
(12,7,1)

的形状。我尝试过使用输入形状,但我还是很难遵循它们的逻辑。从你发布的链接中,输入形状3d张量和形状:(批量大小,步骤,输入尺寸)。这可以帮助你标记你的句子