多(单输出)NN与单(多目标)NN有什么区别?

时间:2019-04-30 07:51:36

标签: python tensorflow machine-learning keras deep-learning

我正在使用Keras / TF解决以下自回归问题:

输入:

m 示例x 10 个时间步长(序列长度)x 7 个特征

(每个值都是真实值)

输出:

m 示例x 4 个目标/“标签”(我要预测的实际值) < / p>

到目前为止,使用LSTMs 最后是密集层的LSTM(已编辑)。因此,举一个例子,我给出了10个大小为10的序列中的7个特征,而我只想从中得到4个实数值(我正在根据先前的值预测当前值)。

我的问题是以下

预测之间有什么区别?

a。 1个输出,尺寸为 m x 4

b。 4个输出,每个输出的尺寸为 m x 1

我已经尝试了这两种方法,但没有发现任何特别的区别,但是我想了解它们的作用。在第二种情况下,我知道我可以为要预测的每个变量指定不同的损失和不同的权重,但这似乎不如第一种方法正确。

#python / Keras-TF
#a. multi output
model = Model(inputs = X_input, outputs = [Output1,Output2,Output3,Output4])
prediction = model.predict(X_test_normalized) #returns an inconvenient list of 4 [2 by 1 vectors] which in the end gives me m*4 real values as wanted

###### vs ######

#b. single output
model = Model(inputs = X_input, outputs = [Output1]) #vector of dimension 4
prediction = model.predict(X_test_normalized) #returns a m*4 matrix

1 个答案:

答案 0 :(得分:0)

在大多数情况下它没有什么不同。如果输出层是密集层,则每个输出层将具有n * 1权重矩阵。如果您只有一个输出层,则权重的形状将改为n * 4。通常,一个大输出层速度更快,因为一个大矩阵乘法通常快于多个小矩阵乘法。

您也可以加权单个输出层的输出。只需将其乘以输出大小的权重向量,然后再进行损失即可。