我有一个以这种方式构建的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,)
我错过了什么?
答案 0 :(得分:3)
虽然Keras Layers
(Input
,Dense
等)将单个样本的形状作为参数,Model.predict()
将输入批量数据作为参数(即堆积在第一维上的样品)。
现在,您的模型认为您正在传递一批200
形状(1,)
的样本。
这样可行:
batch_size = 1
encoder.predict(np.random.rand(batch_size, 200))