Fil*_*ixo 4 python neural-network deep-learning tensorflow
我想在 TensowFlow 上实现一个通用模块,它接收 TensorFlow 模型列表(这里表示为专家)并从中构建专家组合,如下图来自http://www.aclweb 所示。组织/文集/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 )
Run Code Online (Sandbox Code Playgroud)
想象一下,这是您的单一“专家”模型架构。我知道这是相当基本的,但它可以用于我们的说明目的。
我们要做的是将所有专家系统存储在矩阵的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 )
Run Code Online (Sandbox Code Playgroud)
g是一个由 1 和 0 组成的矩阵。为您想要保留的每个神经连接插入一个 1,为您想要阻止的每个神经连接插入一个 0。如果您有 4 个专家系统,那么 1/4 的连接将是 1,3/4 将是 0。
如果您希望他们都平等投票,那么您需要将g 的所有值设置为 1/4。
| 归档时间: |
|
| 查看次数: |
3595 次 |
| 最近记录: |