【问题标题】:TensorFlow Keras returning multiple predictions while expecting oneTensorFlow Keras 在期望一个的同时返回多个预测
【发布时间】:2019-05-27 11:58:43
【问题描述】:

我正在学习 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]])吗?
  • @pooyan 是的,同样的输出。

标签: python tensorflow machine-learning keras lstm


【解决方案1】:

当你写作时:

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 的样本。

【讨论】:

  • 我得到了同样的结果。
  • @MattS 把它放在另一个列表中。我正在编辑我的答案。
  • @MattS 编辑了我的答案。
  • 哇,就是这样!说得通。谢谢!
猜你喜欢
  • 2017-07-13
  • 1970-01-01
  • 2011-10-18
  • 2018-09-11
  • 2016-08-22
  • 2019-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多