【问题标题】:Neural network input shape error神经网络输入形状错误
【发布时间】:2017-06-12 22:00:12
【问题描述】:

我是 keras 的初学者,我正在尝试使用神经网络对数据进行分类。

   x_train = x_train.reshape(1,x_train.shape[0],window,5)
   x_val = x_val.reshape(1,x_val.shape[0],window,5)

   x_train = x_train.astype('float32')
   x_val = x_val.astype('float32')

   model = Sequential()

   model.add(Dense(64,activation='relu',input_shape= (data_dim,window,5)))
   model.add(Dropout(0.5))

   model.add(Dense(64,activation='relu'))
   model.add(Dropout(0.5))
   model.add(Dense(2,activation='softmax'))

   model.compile(loss='categorical_crossentropy',
          optimizer='sgd',
          metrics=['accuracy'])

   weights = model.get_weights()


   model_info = model.fit(x_train, y_train,batch_size=batchsize, nb_epoch=15,verbose=1,validation_data=(x_val, y_val))

  print x_train.shape
  #(1,1600,45,5)

  print y_train.shape
  #(1600,2)

这个脚本总是有这个错误,我不明白为什么:

 ValueError: Error when checking target: expected dense_3 to have 4 dimensions, but got array with shape (16000, 2)

【问题讨论】:

  • 能否提供更完整的异常跟踪?它将有助于修复错误。
  • 我无法使用plot_model,python告诉我即使我已经安装了它也无法导入pydot

标签: python-2.7 neural-network keras


【解决方案1】:

您的模型的输出(dense_3,之所以这样命名,是因为它是第三个 Dense 层)有四个维度。但是,您尝试将其与 (y_train) 进行比较的标签只有两个维度。您将需要更改网络架构,以便您的模型重塑数据以匹配标签。

刚开始时很难跟踪张量形状,因此我建议在调用 model.fit 之前先调用 plot_model(model, to_file='model.png', show_shapes=True)。您可以查看生成的 PNG 以了解图层对数据形状的影响。

【讨论】:

  • 谢谢,所以我要改变x_train的形状?
  • 使用 print(model.summary()) 检查模型层尺寸。您将看到,使用此模型结构和 x_train.shape,您将无法获得 y_train.shape。要么改变 x_train 的形状,要么改变模型结构。
  • @coline.s 不,y_train 的形状。
猜你喜欢
  • 2017-12-05
  • 2020-03-16
  • 2020-12-28
  • 1970-01-01
  • 1970-01-01
  • 2017-07-30
  • 2017-08-31
  • 2020-05-26
  • 2016-07-01
相关资源
最近更新 更多