为什么keras lstm imdb中的模型预测输出是一个向量?

数据挖掘 神经网络 张量流 喀拉斯
2022-03-06 17:02:57

如果在 keras 中运行 LSTM 情感分类任务示例的示例

https://github.com/fchollet/keras/blob/master/examples/imdb_lstm.py

并添加

p = model.predict(x_test[0])
print(p.shape)

你得到: (80,1)

.. 为什么?我认为模型的重点是根据每个 y_train 元素将每个样本分类为 0 或 1(二元分类)

1个回答

x_test形状为(25000, 80),这意味着 25000 个样本,每个样本对应一个最多包含 80 个标记的句子(参见 参考资料maxlen)。因此x_test[0]是一个大小为 80 的向量。

model.predict确实适用于批量样本,因此您可以调用 allmodel.predict(x_test)您将获得一个n预测向量,其中 n 是测试样本的数量,即在这种情况下为 25000。您还可以通过切片预测测试集的一部分的结果,例如model.predict(x_test[:10])前 10 个样本。

当您仅对一个样本调用此函数时会发生什么x_test[0],输入被解释为一批 80 个样本,每个样本只有一个标记。(据我所知,这种“解释”发生在函数树的某处keras.engine.training._standardize_inpupt_data。)模型事先“不知道”输入样本的长度,因此不会抱怨这些非常短的样本。所以你得到了所有这些样本的 80 个预测,就好像它们都是只有一个标记的句子一样。

要获得第一个样本的预测,您可以使用model.predict(x_test[:1]). 所以你预测一个只包含一个样本的批次,并得到一个预测的对应批次。