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

时间:2019-03-11 00:58:56

标签: python tensorflow keras neural-network deep-learning

我有这样的输入

x=[[0,0,0,0,1,0,0,0]....[n,n,n,n,n,n,n,n]] x.shape=(18998,8)

这样的输出

y= 11 11 11 11 ... 10 y.shape=(18998,)

我这样构建模型

env_model = Sequential()
env_model.add(Dense(8, activation='relu', input_dim=8))
env_model.add(Dense(128, activation='relu'))
env_model.add(Dense(256, activation='relu'))
env_model.add(Dense(512, activation='relu'))
env_model.add(Dense(14, activation='softmax'))
env_model.summary()
env_model.save('model_weights/weights.environment.h5')

我认为该模型应该没什么问题,但我不断收到如下错误:

  

'ValueError:检查目标时出错:预期density_8具有形状(14,)但具有形状(1,)的数组'

您能帮我指出我的输入,输出或模型出了什么问题吗?我期待着您的帮助。非常感谢你!

1 个答案:

答案 0 :(得分:0)

在您的模型中,

env_model.add(Dense(14, activation='softmax')) 

Dense向量需要一个目标形状数组(batch_size,14)。您正在为其提供形状数组(batch_size)。

  

注意:在NumPy数组的形状中,逗号定义了未指定的尺寸。假设您有一个形状数组(12,)。意味着您有12个不同长度的样本(1、2、6等)。第二个暗角不是特定的,因此由,表示。

因此,您需要将目标数据转换为形状(18998,dim),其中dim是要素的长度。要实现这一点,您可以尝试两种方法:

  1. 如@giser_yugang所述,请使用keras.utils.to_categorical()将目标数据转换为分类数据
  2. 将特征向量填充到固定长度。您可以通过keras.preprocessing.sequences.pad_sequence()
  3. 来完成此操作

因此,最后,您应该具有固定长度的目标数据。