我曾尝试用一层构建 CNN,但我遇到了一些问题。事实上,编译器告诉我
ValueError:检查模型输入时出错:预期 conv1d_1_input 具有 3 个维度,但得到形状为 (569, 30) 的数组
这是代码
import numpy
from keras.models import Sequential
from keras.layers.convolutional import Conv1D
numpy.random.seed(7)
datasetTraining = numpy.loadtxt("CancerAdapter.csv",delimiter=",")
X = datasetTraining[:,1:31]
Y = datasetTraining[:,0]
datasetTesting = numpy.loadtxt("CancereEvaluation.csv",delimiter=",")
X_test = datasetTraining[:,1:31]
Y_test = datasetTraining[:,0]
model = Sequential()
model.add(Conv1D(2,2,activation='relu',input_shape=X.shape))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X, Y, epochs=150, batch_size=5)
scores = model.evaluate(X_test, Y_test)
print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))
原文由 protti 发布,翻译遵循 CC BY-SA 4.0 许可协议
TD; lr 你需要重塑你的数据使其具有 空间 维度
Conv1d
意义:本质上重塑一个看起来像这样的数据集:
到:
解释和例子
通常卷积在空间维度上起作用。内核在产生张量的维度上“卷积”。在 Conv1D 的情况下,内核传递给每个示例的“步骤”维度。
你会看到 Conv1D 在 NLP 中使用,其中
steps
是句子中的一些单词(填充到某个固定的最大长度)。这些词将被编码为长度为 4 的向量。这是一个例句:
在这种情况下,我们将输入设置为 conv 的方式:
在您的情况下,您会将这些特征视为空间维度,每个特征的长度为 1。(见下文)
这是您数据集中的示例
我们将 Conv1D 示例设置为:
如您所见,必须将数据集重塑为 (569, 30, 1) 使用:
这是您可以运行的完整示例(我将使用 Functional API )