示例#1
0
def composite_layer(inputs, mask, hparams, for_output=False):
    """Composite layer."""
    x = inputs

    # Applies ravanbakhsh on top of each other.
    if hparams.composite_layer_type == "ravanbakhsh":
        for layer in xrange(hparams.layers_per_layer):
            with tf.variable_scope(".%d" % layer):
                x = common_layers.ravanbakhsh_set_layer(
                    hparams.hidden_size,
                    x,
                    mask=mask,
                    sequential=for_output,
                    dropout=hparams.relu_dropout)

    # Transforms elements to get a context, and then uses this in a final layer.
    elif hparams.composite_layer_type == "reembedding":
        # Transform elements n times and then pool.
        for layer in xrange(hparams.layers_per_layer):
            with tf.variable_scope("sub_layer_%d" % layer):
                x = common_layers.linear_set_layer(
                    hparams.hidden_size, x, dropout=hparams.relu_dropout)
                if for_output:
                    context = common_layers.running_global_pool_1d(x)
                else:
                    context = common_layers.global_pool_1d(x, mask=mask)
        # Final layer.
        x = common_layers.linear_set_layer(hparams.hidden_size,
                                           x,
                                           context=context,
                                           dropout=hparams.relu_dropout)
    return x
  def testLinearSetLayer(self):
    x1 = np.random.rand(5, 4, 11)
    cont = np.random.rand(5, 13)
    x1_ = tf.Variable(x1, dtype=tf.float32)
    cont_ = tf.Variable(cont, dtype=tf.float32)

    simple_ff = common_layers.linear_set_layer(32, x1_)
    cont_ff = common_layers.linear_set_layer(32, x1_, context=cont_)

    self.evaluate(tf.global_variables_initializer())
    actual = self.evaluate([simple_ff, cont_ff])
    self.assertEqual(actual[0].shape, (5, 4, 32))
    self.assertEqual(actual[1].shape, (5, 4, 32))
示例#3
0
    def testLinearSetLayer(self):
        x1 = np.random.rand(5, 4, 11)
        cont = np.random.rand(5, 13)
        x1_ = tf.Variable(x1, dtype=tf.float32)
        cont_ = tf.Variable(cont, dtype=tf.float32)

        simple_ff = common_layers.linear_set_layer(32, x1_)
        cont_ff = common_layers.linear_set_layer(32, x1_, context=cont_)

        self.evaluate(tf.global_variables_initializer())
        actual = self.evaluate([simple_ff, cont_ff])
        self.assertEqual(actual[0].shape, (5, 4, 32))
        self.assertEqual(actual[1].shape, (5, 4, 32))