【发布时间】:2021-09-18 01:44:02
【问题描述】:
我有一百万行数据,包含六个特征和三个类别。
6.442 6.338 7.027 8.789 10.009 12.566 A
6.338 7.027 5.338 10.009 8.122 11.217 A
7.027 5.338 5.335 8.122 5.537 6.408 B
5.338 5.335 5.659 5.537 5.241 7.043 B
5.659 6.954 5.954 8.470 9.266 9.334 C
6.954 5.954 6.117 9.266 9.243 12.200 C
5.954 6.117 6.180 9.243 8.688 11.842 A
6.117 6.180 5.393 8.688 5.073 7.722 A
... ... ... ... ... ... ... ... ... ... ...
我想将此数据集输入 CNN。
所以,我编写了以下 Keras 代码:
model = Sequential()
model.add(Conv1D(filters=n_hidden_1, kernel_size=3, activation='sigmoid',
input_shape=(1, num_features)))
model.add(Conv1D(filters=n_hidden_2, kernel_size=3, activation='sigmoid'))
model.add(Dropout(0.5))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(num_classes, activation='softmax'))
这段代码给了我以下错误:
ValueError: Negative dimension size caused by subtracting 3 from 1 for
'{{node conv1d/conv1d}}
= Conv2D[T=DT_FLOAT, data_format="NHWC", dilations=[1, 1, 1, 1]
, explicit_paddings=[], padding="VALID", strides=[1, 1, 1, 1], use_cudnn_on_gpu=true]
(conv1d/conv1d/ExpandDims, conv1d/conv1d/ExpandDims_1)' with input shapes
: [?,1,1,6], [1,3,6,64].
编辑:然后,我将模型修改如下:
model = Sequential()
model.add(Conv1D(filters=n_hidden_1, kernel_size=3, activation='sigmoid',
input_shape=(n_hidden_1, num_features, 1)))
model.add(Conv1D(filters=n_hidden_2, kernel_size=3, activation='sigmoid'))
model.add(Dropout(0.5))
model.add(MaxPooling1D(3))
model.add(Flatten())
model.add(Dense(num_classes, activation='softmax'))
现在我收到以下错误消息:
ValueError: Input 0 of layer max_pooling1d is incompatible with the
layer: expected ndim=3, found ndim=4. Full shape received:
(None, 64, 2, 64)
我写错了什么,为什么错了?
【问题讨论】:
-
您可以尝试将
kernel_size减少到2 或删除Conv1D或MaxPooling1D层之一。 -
由于序列长度只有 6,Conv1D 层的输出的大小逐渐变小,因为它通过它们。达到特定大小后,我们无法对其执行最大池化
-
在 Conv1D 层之后添加一个 Flatten 层。
-
@user366312 将
x_train传递给model.fit()时的形状是什么? -
@Kaveh,当你将 x_train 传递给 model.fit() 时,它的形状是什么? - 一个向量的向量。每个内部向量有 6 列和 1 行。外部向量有 100 万个条目。
标签: python keras conv-neural-network