预期density_8具有形状(2,),但具有形状(1,)的数组

时间:2019-11-30 01:04:37

标签: python tensorflow keras

我正在尝试创建用于分析ECG信号的多通道一维CNN。我有258个12导联心电图,长度为300个样本,因此我的输入尺寸为(258,300,12)。

model = Sequential()
model.add(Conv1D(filters=64, kernel_size=10, activation='relu', input_shape=(n_timesteps,n_features), padding='same'))
model.add(MaxPooling1D(pool_size=2))
model.add(Conv1D(filters=64, kernel_size=10, activation='relu', padding='same'))
model.add(MaxPooling1D(pool_size=2))
model.add(Conv1D(filters=64, kernel_size=10, activation='relu', padding='same'))
model.add(MaxPooling1D(pool_size=2))
model.add(Conv1D(filters=64, kernel_size=10, activation='relu', padding='same'))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(100, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))
model.summary()

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
history = model.fit(X_train, y_train, epochs=10, batch_size=20, verbose=1, validation_split = 0.2)

我正在运行上面的代码,并收到以下错误

  

ValueError:检查目标时出错:预期density_8的形状为(2,),但数组的形状为(1,)

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

因此,您正在解决二进制分类问题。
错误消息表明我们的模型期望标签的形状为(2,),并且我认为您正在使用num_classes=2。但是,您提供的标签为10(1,)。要解决此错误,您需要更改模型的输出密集层,并且该层应具有一个具有sigmoid激活功能的神经元。

model.add(Dense(num_classes, activation='sigmoid'))  # num_classes=1

答案 1 :(得分:0)

您正在尝试像这样训练模型,

model.fit(X_train, y_train, epochs=10, batch_size=20, verbose=1, validation_split = 0.2)

y_train的形状类似于(n, 1),其中n是用于训练的样本数。

现在,您正在使用最后一层构建模型,

model.add(Dense(num_classes, activation='softmax'))

从错误消息中,可以推断出您正在设置num_classes=2。因此,最后一层将具有2个节点。这样的模型期望y_train的形状为(n,2)。但是您正在使用形状为y_train的{​​{1}}。

为解决错误,您可以将最后一层更改为

(n,1)

请注意,激活功能应更改为num_classes = 1 model.add(Dense(num_classes, activation='sigmoid'))