python - 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 的样本。
推荐阅读
- c# - 如何根据互联网 ip 自定义 swagger url?
- pandas - 读取多个 CSV 文件并跳过不存在的文件
- javascript - 超核协议:从公钥获取超核发现密钥的功能
- python - 加快读取多个泡菜文件
- jhipster - jhipster应用在微服务中的使用
- python - 警告命令缺少需求错误
- amazon-web-services - AWS Amplify CDK Cognito 身份池创建错误
- javascript - 在Python中使用Selenium将复选框隐藏到没有ID的按钮中
- python - 在字符串单词之间添加空格
- jestjs - 使用 Vue3 的 vue-i18n 插件时,Jest 错误“SyntaxError: Need to install with `app.use` function”