我正在学习TensorFlow和LSTM,并且想知道为什么我在训练预测输出返回一个值时为什么我的预测输出具有多个值。我的目标是在使用数组进行情感分析训练之后,获得介于0和1之间的单个值。
训练输入数据如下:
mFragments
所有输入数组的长度都相同,并用0填充。训练目标数据如下:
[[59, 21, ... 118, 194], ... [12, 110, ... 231, 127]]
型号:
[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))
我不想取输出的平均值,因为输入数组中的值之间的关系对于情感分析很重要。如果我正在训练预测单个值,那么我将不理解为什么不输出单个值。我是TensorFlow,Keras和分层神经网络的新手,所以我确定我缺少明显的东西。
答案 0 :(得分:3)
写时:
func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
RealmManager.shared.configureRealm()
return true
}
如果您要给模型提供三个输入样本,那么作为回报,您将获得三个输出,每个输入样本一个。相反,如果用model.predict([192, 25, 651])
来表示一个输入样本,则将其包装在两个列表中:
[192, 25, 651]
原因:最外面的列表对应于模型所有输入层的所有输入数据的列表,此处为其中之一。第二个列表对应于第一个(也是唯一一个)输入层的数据,第三个列表对应一个输入样本。列表输入就是这种情况,因为多输入(和多输出)Keras模型应将输入数组的列表作为输入。一种更好的方法是改用numpy数组:
model.predict([[[192, 25, 651]]])
model.predict(np.array([[192, 25, 651]]))
的形状为np.array([[192, 25, 651]])
,表示一个长度为3的样本。