如果在 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(二元分类)
如果在 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(二元分类)
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]). 所以你预测一个只包含一个样本的批次,并得到一个预测的对应批次。