Python 如何确定使用哪种合并模式(加法/平均/乘法/点/concat)?

Python 如何确定使用哪种合并模式(加法/平均/乘法/点/concat)?,python,merge,keras,Python,Merge,Keras,在测试了[babi_rnn.py]和[babi_memnn.py]的脚本之后,[如何确定使用哪种合并模式(add/average/multiply/dot/concat)]的问题在我脑海中多次出现 例如,对于LSTM建模,使用[concat]合并两个分支的时序层输出似乎很容易理解 但是,我不太容易理解为什么要使用[add]在[babi_rnn.py]中合并两个分支。在[babi_memnn.py]中,使用[add]、[dot]和[concat]合并模式 那么,对于在不同的使用场景中使用哪种合并功

在测试了[babi_rnn.py]和[babi_memnn.py]的脚本之后,[如何确定使用哪种合并模式(add/average/multiply/dot/concat)]的问题在我脑海中多次出现

例如,对于LSTM建模,使用[concat]合并两个分支的时序层输出似乎很容易理解

但是,我不太容易理解为什么要使用[add]在[babi_rnn.py]中合并两个分支。在[babi_memnn.py]中,使用[add]、[dot]和[concat]合并模式


那么,对于在不同的使用场景中使用哪种合并功能,有什么建议吗?

这些合并功能分为三类

add
avg
是线性组合。它用于简单地将几个不同的组件组合在一起,因为梯度通过加法和减法很好地流动。一个常见的用例是将(+)几个标准加在一起,以获得联合训练多个任务的神经网络的损失函数

另一个例子是L2正则化:

L2正则化旨在最小化权重的方差。因此,重量越大,损失越大


multiply
dot
的特例。在Keras中,可以使用
指定轴。点积用于确定两个或多个向量之间的相似程度。注:
dot
产品实际上是一种收缩操作。其大小将小于或等于任何一个原始输入。以几何方式显示为投影:


concat
不会放弃任何输入。然后,可以将连接的向量馈送到隐藏层中,以便按元素重新缩放。您找不到元素之间的交互。一种常见的做法是将堆叠RNN的隐藏状态和输出连接起来,并将其馈送到
密集的
层,使多个RNN执行类似于前馈网络的不同任务


总之,每个合并操作都有不同的用例。在Luong的关注论文中,提出了3种评分机制。根据您的型号,您可以选择最适合您的型号


回答得很好!这使这个问题更加清楚!在绘制的keras模型中似乎有一个错误:“keras.layers.core.Merge”的输入形状应该是[(None,32),(None,32)]。特别是您对不同合并模式的潜在含义给出了一些解释!太好了!你能再解释一下
add
average
的区别吗?例如,为什么不在[babi_rnn.py]中使用
average
而不是
add
@Ricky HanThese也应该有同样的效果。经过一些元素重缩放后,它们应该是完全相同的值。