检查目标时出错:预期density_4的形状为(3,),但数组的形状为(6,)

时间:2019-03-26 17:10:32

标签: python keras

我必须训练一个模型来对时间序列数据进行分类。该数据中有6个类,这就是为什么我使用单热编码器对其进行编码的原因。唯一的输入功能是“ ecg” 列,该列由行向量组成。数据看起来像这样;

                                               ecg      0  1  2  3  4  5
0    [[0.1912, 0.3597, 0.3597, 0.3597, 0.3597, 0.35...  1  0  0  0  0  0
1    [[0.2179, 0.4172, 0.4172, 0.4172, 0.4172, 0.41...  1  0  0  0  0  0
2    [[0.1986, 0.3537, 0.3537, 0.3537, 0.3537, 0.35...  0  1  0  0  0  0
3    [[0.2808, 0.5145, 0.5145, 0.5145, 0.5145, 0.51...  0  1  0  0  0  0
4    [[0.1758, 0.2977, 0.2977, 0.2977, 0.2977, 0.29...  0  0  1  0  0  0
5    [[0.2183, 0.396, 0.396, 0.396, 0.396, 0.396, 0...  0  0  1  0  0  0
6    [[0.204, 0.3869, 0.3869, 0.3869, 0.3869, 0.386...  0  0  0  1  0  0
7    [[0.1695, 0.2823, 0.2823, 0.2823, 0.2823, 0.28...  0  0  0  1  0  0
8    [[0.2005, 0.3575, 0.3575, 0.3575, 0.3575, 0.35...  0  0  0  0  1  0
9    [[0.1969, 0.344, 0.344, 0.344, 0.344, 0.344, 0...  0  0  0  0  1  0
10   [[0.2312, 0.4141, 0.4141, 0.4141, 0.4141, 0.41...  0  0  0  0  0  1
11   [[0.1862, 0.3084, 0.3084, 0.3084, 0.3084, 0.30...  0  0  0  0  0  1
12   [[0.2605, 0.47, 0.47, 0.47, 0.47, 0.47, 0.3814...  1  0  0  0  0  0
13   [[0.2154, 0.3733, 0.3733, 0.3733, 0.3733, 0.37...  1  0  0  0  0  0
.                            .                          .  .  .  .  .  .
.                            .                          .  .  .  .  .  .
.                            .                          .  .  .  .  .  .
.                            .                          .  .  .  .  .  .

首先,我将数据框切片为具有 train_x train_y;

train_x = final_dataset.iloc[:,0] #the only input feature is the first column
train_y = final_dataset.iloc[:,1:] # rest of the columns are class labels

在那之后,我创建了我的神经网络并在其中添加了层;

model = Sequential()
model.add(Dense(256, input_shape = (1,))) # there is only one input feature
model.add(Activation('relu'))
model.add(Dense(256))
model.add(Activation('relu'))
model.add(Dense(128))
model.add(Activation('relu'))
model.add(Dense(3, activation='softmax'))

如上所述,我将input_shape设置为1,因为只有一个输入功能是ecg列。毕竟,我开始训练我的模型;

adam = keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)

model.compile(optimizer = adam, loss = 'categorical_crossentropy', metrics = ['accuracy'])
model.fit(train_x,train_y,epochs = 500, batch_size = 32, validation_split = 0.3)

我已将categorical-crossentropy用作损失函数。运行代码时,出现以下错误;

  

检查目标时出错:预期density_4具有形状(3,),但   得到了形状为(6,)的数组

我对Keras相当陌生,因此我无法弄清楚是什么原因导致了该问题以及如何解决该问题。感谢您的任何帮助。

1 个答案:

答案 0 :(得分:0)

最后一个输出层的尺寸必须与差异类的数量相同。 在您的情况下,您有6个differents类,因此您必须具有:

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

希望我能帮忙!