ValueError:检查目标时出错:预期density_108具有2维,但数组的形状为(36020、10、2)

时间:2018-10-28 19:13:18

标签: python tensorflow machine-learning keras conv-neural-network

我正在用Convolution1D层构建卷积神经网络。我的网络模型如下。密集层的输入似乎会生成形状为(36020,10,2)的数组。

#network model
cnn = Sequential()
cnn.add(Convolution1D(64, 3, border_mode="same",activation="relu",input_shape=(25,1)))
cnn.add(MaxPooling1D(pool_length=(2)))
cnn.add(Flatten())
cnn.add(Dense(128, activation="relu"))
cnn.add(Dropout(0.5))
cnn.add(Dense(2, activation="softmax"))

我要用来拟合模型的数据是:

X_train=[[[1.0000000e+00]
  [3.0122564e-08]
  [1.6120090e-05]
  ...
  [0.0000000e+00]
  [9.4886076e-08]
  [3.0170717e-08]]

 [[1.0000000e+00]
  [0.0000000e+00]
  [0.0000000e+00]
  ...
  [0.0000000e+00]
  [0.0000000e+00]
  [1.2500001e-12]]

 [[1.0000000e+00]
  [0.0000000e+00]
  [0.0000000e+00]
  ...
  [0.0000000e+00]
  [0.0000000e+00]
  [3.1249999e-11]]

 ...

 [[0.0000000e+00]
  [1.0842798e-05]
  [1.0943735e-06]
  ...
  [0.0000000e+00]
  [9.6288932e-09]
  [1.3172292e-10]]

 [[0.0000000e+00]
  [2.8011250e-01]
  [8.8251436e-01]
  ...
  [0.0000000e+00]
  [4.1974179e-04]
  [3.6202004e-04]]

 [[0.0000000e+00]
  [8.3799750e-06]
  [9.5839296e-06]
  ...
  [0.0000000e+00]
  [8.8683461e-09]
  [1.0194775e-10]]]

y_train = [[[0. 1.]
  [1. 0.]
  [1. 0.]
  ...
  [1. 0.]
  [1. 0.]
  [1. 0.]]

 [[0. 1.]
  [1. 0.]
  [1. 0.]
  ...
  [1. 0.]
  [1. 0.]
  [1. 0.]]

 [[0. 1.]
  [1. 0.]
  [1. 0.]
  ...
  [1. 0.]
  [1. 0.]
  [1. 0.]]

 ...

 [[1. 0.]
  [1. 0.]
  [1. 0.]
  ...
  [1. 0.]
  [1. 0.]
  [1. 0.]]

 [[1. 0.]
  [1. 0.]
  [1. 0.]
  ...
  [1. 0.]
  [1. 0.]
  [1. 0.]]

 [[1. 0.]
  [1. 0.]
  [1. 0.]
  ...
  [1. 0.]
  [1. 0.]
  [1. 0.]]]

我不断收到有关稠密层尺寸的错误。我真的是神经网络编程的新手。

1 个答案:

答案 0 :(得分:1)

问题是模型(None, 2)的输出形状与训练模型时提供的标签数组(36020, 10, 2)的形状不一致。您需要将标签数组的形状更改为(num_samples, 2),或者只是更改模型的层参数和体系结构以使其具有(None, 10, 2)的输出形状(即与{{1保持一致) }})。关于哪种方法是正确的方法,我无法进一步评论,因为这完全取决于您正在处理的问题的实际输入和输出形状,而您在这方面没有提供任何信息。