编程语言
首页 > 编程语言> > python-TensorFlow专家混合

python-TensorFlow专家混合

作者:互联网

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

enter image description here

因此,此模型获得输入x,该输入x会馈入不同的专家以及选通网络.最终输出对应于整体输出,该总输出由不同专家的输出总和乘以对应的门控函数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中,并定义一个门控矩阵.

我们称其为门控矩阵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,而3/4的连接将为0.

如果希望他们所有人平等投票,则将g的所有值都设为1/4.

标签:tensorflow,neural-network,deep-learning,python
来源: https://codeday.me/bug/20191026/1933189.html