【问题标题】:Keras error : Expected to see 1 arrayKeras 错误:预计会看到 1 个数组
【发布时间】:2017-07-24 13:51:39
【问题描述】:

当我尝试在 keras 中训练 MLP 模型时出现以下错误(我使用的是 keras 版本1.2.2

检查模型输入时出错:您输入的 Numpy 数组列表 传递给您的模型的大小不是模型预期的大小。预期的 查看 1 个数组,但得到了以下 12859 个数组的列表:

这是模型的总结

____________________________________________________________________________________________________
Layer (type)                     Output Shape          Param #     Connected to
====================================================================================================
dense_1 (Dense)                  (None, 20)            4020        dense_input_1[0][0]
____________________________________________________________________________________________________
dense_2 (Dense)                  (None, 2)             42          dense_1[0][0]
====================================================================================================
Total params: 4,062
Trainable params: 4,062
Non-trainable params: 0
____________________________________________________________________________________________________
None

这是模型的第一行

 model.add(Dense(20, input_shape=(200,), init='lecun_uniform', activation='tanh'))

培训:

model.fit(X,Y,nb_epoch=100,verbose=1)

其中 X 是一个元素列表,而每个元素又是一个包含 200 个值的列表。

编辑:

我也试过

model.add(Dense(20, input_shape=(12859,200), init='lecun_uniform', activation='tanh'))

但我遇到了同样的错误

【问题讨论】:

  • 尝试使用关键字input_diminput_dim=200,它定义了输入节点的数量。那么样本的数量是可变的。使用input_shape,您必须指定完整的形状,即样本数 (input_shape=(len(X), 200))。
  • model.fit(numpy.array(X), Y,nb_epoch=100,verbose=1) 怎么样,由于某种原因,您的 X 似乎不是一个 numpy 数组。
  • 尝试将np.array(X) 而非np.array 列表传递给model.fit
  • 没错。如果您提供完整的代码会更好 - 带有 XY 定义。尝试打印出type(X)
  • 谢谢大家 .. 它似乎与 input_dim=200 一起工作,通过 np.array(X)。

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


【解决方案1】:

您的错误来自您的X 出于某种原因未转换为numpy.array 的事实。在此您的X 被视为行列表,这是您的错误消息背后的原因(它期望一个输入而不是具有多个行元素的列表)。转型:

X = numpy.array(X)
Y = numpy.array(Y)

我会检查数据加载过程,因为那里可能会出错。

更新:

正如评论中提到的那样 - input_shape 需要更改为 input_dim

更新 2:

为了保留input_shape,应将其更改为input_shape=(200,)

【讨论】:

  • 感谢您的总结。我还必须将 input_shape 更改为 input_dim 。请将其添加到您的答案中:)
  • 完成。如果您想保留input_shape,请尝试input_shape=(200,)
  • 也为我工作。天啊!这是一个愚蠢的错误。 Keras 开发人员应该编写一些代码来自动将数组转换为 numpy 数组,而不是显示这个愚蠢的错误!!!
【解决方案2】:

我通过添加修复了我的

np.array

到 train_X、train_Y、valid_X 和 valid_Y。例如,

model.fit(np.array(train_X),np.array(train_Y),
          batch_size=32,nb_epoch=20,
          validation_data=(np.array(valid_X),np.array(valid_Y)),
          callbacks=[early_stop])

我得到了here 的帮助。这种方法可能运行缓慢,因为所有数据特征都必须转换为 numpy 数组,并且对您的系统来说可能需要做很多工作。

【讨论】:

    猜你喜欢
    • 2020-05-20
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多