Keras模型构建 - ValueError:检查目标时出错:期望dense_24有形状(None,1)但是有形状的数组(576,2)

时间:2017-07-22 21:31:44

标签: tensorflow keras

我正在尝试构建一个keras模型,我有576个样本,4个输入变量和1个目标变量,它们是1或0.我相信我的目标维度/格式有问题,或我模型的最后一层的尺寸。我撞墙了,可以帮助你。

我尝试的第一件事是将目标变量转换为二进制numpy数组,但是当我输入以下代码时:

import pandas as pd
from keras.layers import Dense
import numpy as np
from keras.models import Sequential
from keras.utils.np_utils import to_categorical

n_cols = predictors.shape[1]
target_b = to_categorical(target)
model = Sequential()
model.add(Dense(6, activation='relu',input_shape=(n_cols,)  ))
model.add(Dense(1))
model.compile(optimizer = 'adam', loss ='categorical_crossentropy',metrics=   ['accuracy'] )
model.fit(predictors, target_b, validation_split=.3)

我收到以下错误:

ValueError: Error when checking target: expected dense_24 to have shape (None, 1) but got array with shape (576, 2)

当我试图将目标变量保持为整数numpy ndarray时,我使用了sparse_categorical_crossentropy,但收到了此错误:

InvalidArgumentError (see above for traceback): Received a label value of 1 which is outside the valid range of [0, 1).  Label values: 0 0 0 1 0 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 0 1 1 0 0 1 0 1
 [[Node: SparseSoftmaxCrossEntropyWithLogits_6/SparseSoftmaxCrossEntropyWithLogits = SparseSoftmaxCrossEntropyWithLogits[T=DT_FLOAT, Tlabels=DT_INT64, _device="/job:localhost/replica:0/task:0/cpu:0"](Reshape_13, Cast_30)]

我认为我需要做的就是改变目标变量或模型尺寸,但是我不确定要改变哪一个,我不知道如何改变。我非常感谢你的指导。谢谢!

3 个答案:

答案 0 :(得分:2)

有几种方法:

  1. 将最后一层更改为Dense(2, activation='softmax')
  2. 删除to_categorical行,并使用Dense(2, activation='softmax')loss='sparse_categorical_crossentropy'
  3. 删除to_categorical行,并使用Dense(1, activation='sigmoid')loss='binary_crossentropy'

答案 1 :(得分:0)

您在Dense图层中的输入形状需要1D输入,但看起来您想要输入的数据是2D。您可以将输入值调整为input_shape=(576, 2)

答案 2 :(得分:0)

您的上一层应为Dense(2)。这是因为你的target_b矩阵必须是形状(576,2)。