TensorFlow Keras 在预测时返回多个值而期望返回一个值

我在学习TensorFlow和LSTM,想知道为什么我的预测输出有多个值,而我训练它的目的是返回一个值。我的目标是在用数组进行情感分析训练后,得到一个介于0和1之间的单一值。

训练输入数据看起来像这样:

[[59, 21, ... 118, 194], ... [12, 110, ... 231, 127]]

所有输入数组长度相同,并用0填充。训练目标数据看起来像这样:

[1.0, 0.5, 0.0, 1.0, 0.0 ...]

模型:

model = Sequential()model.add(Embedding(input_length, 64, mask_zero=True))model.add(LSTM(100))model.add(Dense(1, activation=tf.nn.sigmoid))

为什么预测似乎是逐个值进行评估,而不是作为整体数组进行评估?

model.predict([192])# Returns [[0.5491102]]model.predict([192, 25])# Returns [[0.5491102, 0.4923803]]model.predict([192, 25, 651])# Returns [[0.5491102, 0.4923803, 0.53853387]]

我不希望对输出取平均值,因为输入数组中值之间的关系对于情感分析很重要。如果我训练的是预测一个单一值,我不明白为什么输出不是一个单一值。我对TensorFlow、Keras和分层神经网络是新手,所以我肯定是忽略了什么明显的问题。


回答:

当你编写:

model.predict([192, 25, 651])

这就相当于你给模型提供了三个输入样本,因此你会得到三个输出,每个输入样本对应一个输出。相反,如果[192, 25, 651]实际上是你指的一个输入样本,那么你需要用两个列表包装它:

model.predict([[[192, 25, 651]]])

原因是:最外层的列表对应模型所有输入层的全部输入数据,这里是一个输入层。第二层列表对应第一个(也是唯一一个)输入层的数据,第三层列表对应一个输入样本。这适用于列表输入,因为多输入(和多输出)的Keras模型应该接受一个输入数组列表作为输入。一个更好的方法是使用numpy数组:

model.predict(np.array([[192, 25, 651]]))

np.array([[192, 25, 651]])的形状为(1,3),这意味着一个长度为3的样本。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注