检查目标时发生错误:期望密集的形状为(1,),但数组的形状为(15662,)maxpooling为第一层

时间:2019-03-06 18:35:57

标签: keras layer max-pooling

我正在尝试使用keras将maxpooling用作第一层,并且输入和输出尺寸有问题。

print(x_train.shape)
print(y_train.shape)
(15662, 6)
(15662,)

x_train = np.reshape(x_train, (-1,15662, 6)) 
y_train = label_array.reshape(1, -1)

model = Sequential()
model.add(MaxPooling1D(pool_size = 2 , strides=1, input_shape = (15662,6)))
model.add(Dense(5, activation='relu'))
model.add(Flatten())
model.add(Dense(1, activation='softmax'))

model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=
['accuracy'])
model.fit(x_train, y_train,  batch_size= 32, epochs=1)

运行模型后,出现以下错误:

  

ValueError:检查目标时出错:预期的density_622(最后一层)   形状为(1,)但数组的形状为(15662,)

我正在分类,我的目标是二进制(0,1) 谢谢

1 个答案:

答案 0 :(得分:0)

您的目标应具有形状(batch_size, 1),但是您要传递形状(1, 15662)的数组。似乎应该是15662的批次大小,在这种情况下,x_train的形状应为(15662, 6),而y_train的形状应为(15662, 1)。但是,在这种情况下,将MaxPooling1D层作为模型的第一层没有任何意义,因为最大池化需要3D输入(即形状(batch_size, time_steps, features))。您可能要忽略最大池化层(和展平层)。以下代码应该起作用:

# x_train: (15662, 6)
# y_train: (15662,)

model = Sequential()
model.add(Dense(5, activation='relu', input_shape=(6,))) # Note: don't specify the batch size in input_shape
model.add(Dense(1, activation='sigmoid'))

model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=
['accuracy'])
model.fit(x_train, y_train,  batch_size= 32, epochs=1)

但这当然取决于您拥有哪种数据。