我想在 TensowFlow 上实现一个通用模块,该模块接收 TensorFlow 模型列表(此处表示为专家)并从中构建专家组合,如下图所示来自 http://www.aclweb.org/anthology/C16-1133
所以这个模型得到一个输入 x
,它被输入到不同的专家以及门控网络中。最终输出对应于 ensemble output
,它由来自不同专家的输出之和乘以来自门控网络的相应门控函数 gm
给出。所有的专家网络都是同时训练的。
这个模块适合批量训练很重要。我正在寻找已经实现的东西并找到了这个 https://github.com/AmazaspShumik/Mixture-Models 虽然它不在 TensorFlow 上。
所以现在我正在寻找关于构建这个模块的最佳方法的指针和建议,即关于一些已经实现的 TF 层或特别适合这个应用程序的包装器。
最佳答案
是的,您可以通过使用门控占位符在一体化架构中执行此操作。
让我们从一个像这样的简单 tensorflow 概念代码开始,然后添加到它:
m = tf.Variable( [width,height] , dtype=tf.float32 ))
b = tf.Variable( [height] , dtype=tf.float32 ))
h = tf.sigmoid( tf.matmul( x,m ) + b )
想象一下,这是您的单一“专家”模型架构。我知道这是相当基本的,但它可以用于我们的说明目的。
我们要做的是将所有专家系统存储在矩阵的 m 和 b 中,并定义一个门控矩阵。
我们称门控矩阵 为 。它将阻止特定的神经连接。神经连接在 m 中定义。这将是您的新配置
g = tf.placeholder( [width,height] , dtype=tf.float32 )
m = tf.Variable( [width,height] , dtype=tf.float32 )
b = tf.Variable( [height] , dtype=tf.float32 )
h = tf.sigmoid( tf.matmul( x, tf.multiply(m,g) ) + b )
g 是一个由 1 和 0 组成的矩阵。为您想要保留的每个神经连接插入一个 1,为您想要阻止的每个神经连接插入一个 0。如果您有 4 个专家系统,那么 1/4 的连接将是 1,3/4 将是 0。
如果您希望他们都平等投票,那么您需要将 g 的所有值设置为 1/4。
关于python - TensorFlow 专家组合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43845397/