我想在TensowFlow上实现一个通用模块,它接收一个TensorFlow模型的列表(这里表示为专家),并从它构建一个专家的混合体,如http://www.aclweb.org/anthology/C16-1133的下图所示

因此,该模型得到一个输入x,输入到不同的专家和一个门控网络。最后的输出对应于ensemble output,该输出由来自不同专家的输出之和乘以来自门控网络的相应的门控函数gm。所有专家网络都同时接受培训。
此模块适用于批量培训是很重要的。我正在寻找一些已经实现的东西,并找到了这个https://github.com/AmazaspShumik/Mixture-Models,尽管它不在TensorFlow上。
因此,现在我正在寻找关于构建这个模块的最佳方法的指针和建议,即一些已经实现的TF层或包装器,它们将特别适合这个应用程序。
发布于 2017-05-10 01:18:47
是的,您可以使用门控占位符在一个全合一的体系结构中这样做。
让我们从这样一个简单的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中,并定义一个门控矩阵。
让我们调用门控矩阵g。它会阻断特定的神经连接。神经连接用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/4,3/4将是0。
如果您希望他们都平等地投票,那么您将需要将g的所有值设置为1/4。
https://stackoverflow.com/questions/43845397
复制相似问题