当我将其作为输入传递给keras层时,numpy数组具有不同的形状

时间:2018-06-06 15:44:51

标签: arrays numpy keras valueerror

我有一个以这种方式构建的keras编码器(自动编码器的一部分):

input_vec = Input(shape=(200,))
encoded = Dense(20, activation='relu')(input_vec)
encoder = Model(input_vec, encoded)

我想使用numpy生成虚拟输入。

>>> np.random.rand(200).shape
(200,)

但如果我尝试将其作为输入传递给编码器,我会得到一个ValueError:

>>> encoder.predict(np.random.rand(200))
>>> Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/francesco/PycharmProjects/W2VAutoencoded/venv/lib/python3.6/site-packages/keras/engine/training.py", line 1817, in predict
    check_batch_axis=False)
  File "/home/francesco/PycharmProjects/W2VAutoencoded/venv/lib/python3.6/site-packages/keras/engine/training.py", line 123, in _standardize_input_data
    str(data_shape))
ValueError: Error when checking : expected input_1 to have shape (200,) but got array with shape (1,)

我错过了什么?

1 个答案:

答案 0 :(得分:3)

虽然Keras LayersInputDense等)将单个样本的形状作为参数,Model.predict()将输入批量数据作为参数(即堆积在第一维上的样品)。

现在,您的模型认为您正在传递一批200形状(1,)的样本。

这样可行:

batch_size = 1
encoder.predict(np.random.rand(batch_size, 200))